我一直在使用Rsense更新我的emacs配置,以允许在键入代码时出现自动完成下拉框。这在大多数文件中都工作得很好,除了我发现当我在我的ruby on rails项目中编辑一些代码时,它不允许我从表格中选择答案。
下面是我的设置:https://github.com/map7/simple_emacs
我在Ubuntu 10.04下使用它。
对于简单的ruby脚本文件,它工作得很好。我可以打开一个新文件并输入。
"test".up...
就像我在up中输入'p‘字符一样,会出现一个选项列表,我可以用箭头键在列表中上下移动,然后用enter键选择一个(例如:大写)。
不起作用的是,当我在rails项目的基目录中执行完全相同的测试时。
更新:
我发现问题出在(需要'rails)上,所以它是emacs-rails插件中自动补全不喜欢的东西。
更新:
它在emacs-rails - -> -project.el中。如果我注释掉这个宏,那么自动补全就会起作用,否则就不会:
(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))))
有人能解释一下为什么会破坏自动完成功能吗?
发布于 2012-06-19 13:23:40
这里有一个想法:宏将flet
函数(rails-project:root)
与(rails-project:root)
在body
执行之前拥有的值绑定一次。(这就是它声称性能提升的方式:显然,外部(rails-project:root)
的开销很大,因此调用一次并缓存该值似乎是一个好主意。)
不幸的是,如果body
中的代码有意更改(rails-project:root)
返回的值,那么它将不会产生任何影响。这种更改甚至对body
中调用的其他代码都是不可见的,因为Emacs lisp具有flet
名称的动态绑定。
https://stackoverflow.com/questions/7989090
复制相似问题