Emacs Ruby自动完成功能可行吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (18)

我一直在使用Rsense更新我的emacs配置,以允许在输入代码时出现自动完成下拉框。这在大多数文件中都能很好地工作,除非我发现它不允许我在ruby on rails项目中编辑一些代码时从表中选择答案。

github.com/map7/simple_emacs

我在Ubuntu 10.04下使用它。

对于简单的ruby脚本文件,它的效果很好。我可以打开一个新文件并输入。

"test".up...

就像我在选项列表中输入'p'字符一样,我可以用箭头键在列表中上下选中,然后用回车键选中。

(defmacro* rails-project:with-root ((root) &body body)
  "If you use `rails-project:root' or functions related on it
several times in a block of code, you can optimize your code by
using this macro. Also, blocks of code will be executed only if
rails-root exist.
 (rails-project:with-root (root)
    (foo root)
    (bar (rails-core:file \"some/path\")))
 "
 `(let ((,root (rails-project:root)))
    (when ,root
      (flet ((rails-project:root () ,root))
        ,@body))))
提问于
用户回答回答于

这里有一个想法:宏将flet函数(rails-project:root)一次绑定到执行(rails-project:root)前的值body。(这就是它声称性能提高的原因:显然外部(rails-project:root)是昂贵的,因此调用一次并缓存值似乎是一个好主意。)

不幸的是,如果代码里面body有副作用意味着有意改变(rails-project:root)返回的值,那么它就没有任何效果。即使对于在其中调用的其他代码,该更改也是不可见的,body因为Emacs lisp具有flet名称的动态绑定。

扫码关注云+社区