最近SublimeText2を試してみたところ、 Goto Anythingがソースコードのナビゲートに非常に役立つことがわかりました(Ctrl-P file @ symbolは非常にうまく機能しているようです)。Emacsに似たものはありますか?できれば、大量のカスタムelispがなくても、うまく機能するものが望ましいです。
私がこれまでに試したこと:
Helm and Anythingを見
たことがありますが、私が理解している限り、どちらも実際の「インスタント」検索はできません(以下の編集を参照)。私は使用しまし
multi-occur-in-matching-buffers
たが、それも「インスタント」基準を満たすことができないようです。
私は現在、Goto Anythingの代わりとして、#2と#3を一緒に使用しています。
Goto Anythingの正確なクローンではない場合は、単純なインスタント検索ソリューション(開いているすべてのバッファーで特定の文字列を検索し、結果を動的に表示するソリューション)を使用できます。だからそれも受け入れられます。
私はEmacs24.2を使用しているので、v24のみのelispでも問題ありません。
編集: event_jrの提案で、Helmに別のショットを与えましたが、開いているすべてのバッファーでのインスタント検索がサポートされていることがわかりました。helm-multi-occur
+helm-follow-mode
驚くほど私のニーズを満たすことに近づきましたが、マイナーな問題は次のとおりです(つまらないように聞こえるリスクがあります)。
を実行したときに(以下の編集#2を参照)helm-follow-mode
自動的にオンにする方法が見つかりませんhelm-multi-occur
。を使用して手動で呼び出す必要がありC-c C-f
ます。誰かがelispのスニペットでこれを撃ちたいと思っていますか?ST2のGotoAnythingのように「インテリジェント」ではありません(つまり、Goto Anythingのように、ソースコードの「シンボル」を理解しません)。
編集#2:以下のevent_jrの回答のおかげで(そしてもちろん、Helmの作成者であるThierry Volpiattoのおかげで)、GotoAnythingのほとんどを手に入れました。同様の機能をお探しの方には心からお勧めします。以下は私が現在使用しているelispです:
;; instant recursive grep on a directory with helm
(defun instant-rgrep-using-helm ()
"Recursive grep in a directory."
(interactive)
(let ((helm-after-initialize-hook #'helm-follow-mode))
(helm-do-grep)))
;; instant search across all buffers with helm
(defun instant-search-using-helm ()
"Multi-occur in all buffers backed by files."
(interactive)
(let ((helm-after-initialize-hook #'helm-follow-mode))
(helm-multi-occur
(delq nil
(mapcar (lambda (b)
(when (buffer-file-name b) (buffer-name b)))
(buffer-list))))))
;; set keybindings
(global-set-key (kbd "C-M-s") 'instant-search-using-helm)
(global-set-key (kbd "C-M-S-s") 'helm-resume)
(global-set-key (kbd "C-M-g") 'instant-rgrep-using-helm)