2011-08-09 38 views
9

我想爲Emacs實現類似Resharper的「Go To File」功能。當一個印刷機提到的快捷方式,ReSharper的持久性有機污染物,它接受一個通配符字符串並顯示列出的項目相匹配的通配符的所有文件的自動完成菜單的文本框:emacs - 如何在子目錄中查找文件搜索

"Go To File" dialog http://www.jetbrains.com/resharper/features/screenshots/50/navigation_gotofile.png

現在,我知道一個粗暴的方式以達到或多或少的等同性。它涉及運行dired-lR,然後調用dired-isearch-filenames - 這將開始增量搜索特定根目錄內的整個文件層次結構。

upd。我也意識到可以打開大量緩衝區,將它們全部保存在內存中,並使用switch-to-buffer。此解決方案與ido很好地結合,但它不是100%防彈(如果某些文件被添加或刪除,該怎麼辦?)。它也不能很好地與tabbar配合使用,因爲選項卡將顯示項目中包含的所有文件,但不是表示當前上下文的項目子集。

但是,這顯示了大量不必要的信息,並且缺乏自動完成。我看過idoicicles,但它們似乎只在當前目錄內工作得很淺。是否有Emacs插件可以幫助我實現目標?

回答

5

雖然你可能不希望保留大量的緩衝區的開放,你可以連接IDO爲recentf,追蹤最近打開過的文件:

(recentf-mode 1) 
(setq recentf-max-saved-items 300) 

(defun ido-choose-from-recentf() 
    "Use ido to select a recently opened file from the `recentf-list'" 
    (interactive) 
    (find-file (ido-completing-read "Open file: " recentf-list nil t))) 

(global-set-key [(meta f11)] 'ido-choose-from-recentf) 

我一直在使用這一招好幾年了,這是99我需要的所有文件切換的百分比。

除此之外,我使用M-x rgrep,你可能也想看看M-x find-diredM-x find-grep-dired

如需更多選項,請查看this similar question的答案。

+1

我的項目沒有太多的文件,這就是爲什麼我去了一個愚蠢的,但實際的解決方案。我只是調用「find path1 path2 .. pathN -print0」,將結果拆分爲「\ 0」-s並將它們提供給ido-completion-read。謝謝你的想法! –

3

你試過helm了嗎?您可以輕鬆選擇搜索文件,緩衝區,命令以及其他許多內容。

4

Projectile有一個名爲的功能彈丸跳轉到項目文件或多或少你想要什麼。還有find-file-in-project - 一個更簡單的實用程序,但依賴於GNU find的存在。

2

你提到了冰柱,但你錯誤地認爲它「工作很淺」。它以任何你想要的方式工作。如果需要,可以搜索系統上的任何文件,以匹配文件名和路徑的任何部分。您可以定義特定文件和/或目錄的項目,保存其定義,並稍後在這些文件/目錄中進行搜索。 (Emacs的文件集是這個功能的一個嚴格的子集,但你可以使用文件集直接以同樣的方式。)

這應有助於(也看到該網頁末尾的鏈接):

http://www.emacswiki.org/emacs/Icicles_-_File-Name_Input

相關問題