2013-09-26 208 views
14

通常,我知道文件名,但不記得或發現指定精確目錄的麻煩。我希望能夠做find-file x/y/*/some_file.txt,其中*將允許在遞歸目錄中搜索,而不是僅在當前目錄中搜索。如何在目錄中遞歸地查找文件

+1

擴展這樣的路徑有兩個潛在的危險:可能有多個有效的擴展,可能有太多的路徑去嘗試(特別是如果有目錄循環),所以probab你必須使用'find-name-dired'這樣的東西。 – 2013-09-26 23:46:31

回答

0

Icicles命令icicle-locate(或icicle-locate-file,如果您沒有適用於您的操作系統的locate程序)就是爲此而設計的。 Locate a file anywhere under a given directory(包括~HOME或根目錄)。

您可以匹配絕對文件名的任何部分(即路徑和文件名)。您可以使用幾種匹配,包括正則表達式,子字符串和模糊匹配。

5

ido-find-file做到這一點:當你進入不匹配當前目錄 任何文件名,它採用類似locate匹配 你對你的系統上的所有文件寫什麼。

的設置是隻有一行:

(ido-mode) 

在此之後,C-X C-F將調用ido-find-file。 另外,我通常會添加:

(setq ido-enable-flex-matching t) 

,因爲我喜歡它,但有了它,你會locate更多結果, 即foo也將匹配froo

+0

這不會找到遞歸。它只在當前目錄中進行模糊搜索! Flplr更好 – mythicalcoder

1

編輯:我發現與projectile好得多,請參閱我的其他答案。

沒有找到-recursive.el:http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt

下載它,把它放在你的負載路徑,並要求它在你的.emacs:(這是無法通過ELPA或EL-獲得)

(require 'find-recursive)  

現在當你調用Mx find-recursive時,它會要求一個文件名來遞歸搜索一個基本目錄,然後你必須在結果列表中選擇一個文件。不幸的是,它並沒有融入到ido中,但我喜歡它,有時它很有用。

5

我一直期待該功能,我現在滿意的是什麼,我發現:我使用的是helm-projectile

Projectile是一個項目交互庫。項目是包含.projectile文件的VCS目錄或目錄。它是基於GNU找到(但提供了純淨的Emacs Lisp實現過)

https://github.com/bbatsov/projectile

(你可以用packages.el安裝)。您可以單獨使用它:請致電projectile-find-file(或projectile-mode和C-c p f)。它使用ido默認完成,但在這種情況下,我更喜歡helm-projectile的界面。

由於該功能,我的同事們不斷告訴我使用Sublime Text。幸運的是,我發現拋射物:)

+0

子彈很棒。使用簡單,直觀。 – gosukiwi

1

這是一個解決方案,可以讓您選擇性地搜索文件和子​​目錄。要使用它,你需要Dired+Icicles

該命令僅在Dired中使用,爲icicle-visit-marked-file-of-content-recursive(或其-other-window版本)。它綁定到M-+ C-F(對於其他窗口,請使用M-+ C-O - 是的,這些是大寫FO)。

做些什麼:

  • 提供,爲完成候選人,所有標誌着當前Dired目錄文件,pslus所有這些在任何標誌着子目錄已經Dired緩衝區等遞歸。

  • 您可以訪問與您的小型緩衝器輸入相匹配的任意數量的此類候選項,包括所有這些候選項。你可以訪問一些匹配minibuffer輸入模式的模式,然後改變模式以匹配並訪問其他模式---全部在相同的命令調用中。

  • "Matching" your input can mean either or both

    • 匹配的文件
    • 配套文件內容

    也就是說,你的輸入可以是兩部分(分離擊中C-M-j:一個文件-n ame部分和文件內容部分。通過匹配文件名縮小選擇範圍,並通過匹配這些文件中的文本進一步縮小範圍。這種搜索速度很快 - 只要在文件中找到單個匹配項就會成功。

    您可以省略其中任一部分:僅匹配文件名(快速)或僅匹配文件內容(較慢,自然)。

  • 您可以組合輸入模式 - progressive completion。增加額外的模式以增量和交互方式進行匹配要比試圖提供一個正好符合您需要的正則表達式要容易得多。

  • 每個輸入模式(兩部分模式的每個部分)可以是正則表達式。模糊匹配也是可用的。

  • 您也可以在您的Dired緩衝區中插入子目錄,而不是將它們作爲獨立的Dired緩衝區。在Dired緩衝區中標記的任何文件和子目錄都以相同的方式處理。

    如果你不想陷入被標記爲子目錄,您可以使用命令,icicle-visit-marked-file-of-content的非遞歸版本,勢必C-FC-O其他窗口)。

如果您還使用Bookmark+那麼您可以爲一個Dired緩衝區或一組Dired緩衝區添加書籤。書籤記錄哪些文件和子目錄被標記,哪些子目錄被插入,哪些文件和子目錄被省略。跳到這樣的書籤可以恢復所有這些事情。這給你一個方法進行快照的項目,然後您可以利用搜索等M-+ C-F

15

如上所述here

M-x find-name-dired 

後您提供的目錄和模式匹配的文件將顯示在一個Dired緩衝區。您可以導航文件列表(C-nC-p等)並根據需要打開文件(Ret)。

1

很多列出的選項,我使用的下一個命令:

find-file-in-current-directory 

你可以把它放在你的.emacs這樣的:

;; Find file in current directory: 
(global-set-key (kbd "C-M-,") 'find-file-in-current-directory) 

界面看起來很熟悉的那些誰使用fsf工具(https://github.com/junegunn/fzf

相關問題