Emacs Rubyオートコンプリートがほぼ機能しています


132

コードの入力中にオートコンプリートのドロップダウンボックスが表示されるように、Rsenseを使用してemacs構成を更新しています。これは、Ruby on Railsプロジェクトのコードを編集しているときにテーブルから回答を選択できないことを除いて、ほとんどのファイルでうまく機能します。

これが私の設定です:https : //github.com/map7/simple_emacs

私はこれをUbuntu 10.04で使用しています。

単純なルビスクリプトファイルの場合は、うまく機能します。新しいファイルを開いて入力できます。

"test".up...

上に 'p'文字を入力するのと同じように、オプションのリストが表示され、矢印キーでリストを上下に移動して、Enterキーで1つ(例:大文字)を選択できます。

まったく同じテストを行ったが、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))))

これがオートコンプリートを壊す理由を誰かが説明できますか?


1
オートコンプリート機能は、ruby、C ++、lispなどで使用されています
map7

1
つまり、ここでマクロはどこで使用されていますか?
milkypostman 2012年

1
主にrailsマクロを使用して、MVC内の異なるファイル間をジャンプし、DB / server / console / etcを起動します。
map7 2012年

1
回答するソリューションを抽出して、「機能する」チケットを提供できますか?
przemo_li 2012

2
przemo_li、これに対する答えがあったとしても、rails.elプラグインをインストールしていて、railsマイナーモードのソースコードファイル内でオートコンプリートしようとすると、オートコンプリートがまだ機能しません。
map7

回答:


7

ここに考えがあります:マクロは、実行の直前にある値にflet関数を(rails-project:root)一度バインドします。(それがパフォーマンスの向上を主張する方法です:どうやらアウターは高価なので、一度呼び出して値をキャッシュするのは良い考えのようです)(rails-project:root)body(rails-project:root)

残念ながら、返さbodyれる値を意図的に変更することを意図した副作用を持つコードが内にある場合(rails-project:root)、それは効果がありません。bodyEmacs lispにはflet名前の動的バインディングがあるため、その変更は内で呼び出された他のコードからも見えません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.