gpt4 book ai didi

ruby-on-rails-3 - Emacs Ruby 自动完成几乎可以工作

转载 作者:行者123 更新时间:2023-12-03 04:29:24 26 4
gpt4 key购买 nike

我一直在使用 Rsense 更新我的 emacs 配置,以允许在键入代码时出现自动完成下拉框。这在大多数文件中都适用,但我发现当我在 ruby​​ on Rails 项目中编辑一些代码时,它不允许我从表中选择答案。

这是我的设置: https://github.com/map7/simple_emacs

我在 Ubuntu 10.04 下使用它。

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

"test".up...

当我在 up 中键入“p”字符时,会出现一个选项列表,我可以使用箭头键在列表中上下移动,并使用 Enter 键选择一个(例如:大写)。

当我在 Rails 项目的基本目录中进行完全相同的测试时,不起作用。

更新:

发现问题出在 (require 'rails),所以这是 emacs-rails 插件中自动完成功能不喜欢的东西。

更新:

它位于 emacs-rails ->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))))

有人可以解释为什么这会破坏自动完成功能吗?

最佳答案

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

不幸的是,如果 body 中的代码具有副作用,有意更改 (rails-project:root) 返回的值,那么它将没有影响。即使对于 body 中调用的其他代码来说,这种更改也是不可见的,因为 Emacs lisp 具有 flet 名称的动态绑定(bind)。

关于ruby-on-rails-3 - Emacs Ruby 自动完成几乎可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com