2013-12-13 77 views
5

如果一個目錄包含很多文件,並且我想要以文件(或字符串)開頭的文件(或子目錄),那麼有沒有什麼好的方法可以做到這一點?我知道在遠程文件管理器中,人們可以按Alt鍵並開始輸入名稱,光標會隨着鍵入而移動,我想知道Emacs是否有類似的東西。如何在Emacs Dired中快速訪問文件?

+0

在我的回答下面,我添加了遞歸isearching目錄的說明。 – Tobias

+0

如果你有興趣在子目錄(即遞歸)中快速找到文件,你應該看看'projectile'及其'find-file-in-project'和'find-file-in-directory'函數:https://github.com/bbatsov/projectile – Ehvince

+0

然後是瑞士軍刀:http://www.emacswiki.org/emacs/TN中的「不依賴外部程序進行清理」部分如果您調用'elgrep '用前綴鍵搜索遞歸,如果你只指定了文件名的正則表達式,而另一個正則表達式則爲空,那麼它只是用這樣的文件名搜索文件。 – Tobias

回答

6

最快的方式來回答這個問題正在複製從一個部分emacs信息文件。 爲了得到這個文本類型d 米emacsRET然後isearch一個合適的子忽略了第一Failing I-search或者只是去到的信息與,然後直接去到以下提到的信息節點g,然後鍵入節點名稱,然後鍵入ret

(emacs) Dired and Find工作一個是否在dired緩衝或不信息節點的第一:

To search for files with names matching a wildcard pattern use `M-x 
find-name-dired'. It reads arguments DIRECTORY and PATTERN, and 
chooses all the files in DIRECTORY or its subdirectories whose 
individual names match PATTERN. 

從信息節點第二(emacs) Dired Navigation作品dired緩衝器,但僅適用於目前上市文件。但是,請注意,您可以在之前列出子目錄i

`M-s f C-s' (`dired-isearch-filenames') performs a forward 
incremental search in the Dired buffer, looking for matches only 
amongst the file names and ignoring the rest of the text in the buffer. 
`M-s f M-C-s' (`dired-isearch-filenames-regexp') does the same, using a 
regular expression search. If you change the variable 
`dired-isearch-filenames' to `t', then the usual search commands also 
limit themselves to the file names; for instance, `C-s' behaves like 
`M-s f C-s'. If the value is `dwim', then search commands match the 
file names only when point was on a file name initially. *Note 
Search::, for information about incremental search. 

編輯: 要ISEARCH目錄遞歸你可能首先列出它遞歸。

您可以通過使用prefix-arg調用dired遞歸列出子目錄,並將R添加到交換機列表中。

下面的代碼片段的Emacs初始化文件甚至可以簡化這個任務:

(defun dired-noselect-maybe-recursive (dir-or-list &optional switches) 
    "Like `dired-noselect' but lists sub-directories when last character is ?/." 
    (if (and (null switches) 
     (= (aref dir-or-list (1- (length dir-or-list))) ?/)) 
     (dired-noselect dir-or-list "-alR") 
    (dired-noselect dir-or-list switches) 
    )) 

(setq find-directory-functions (subst 'dired-noselect-maybe-recursive 'dired-noselect find-directory-functions)) 

在這個片段中,你得到目錄的常規列表,如果你打電話找文件(CX比照)爲一個沒有斜線的目錄,如果你在最後用斜線調用它,你會得到一個遞歸列表。 但要小心。遞歸目錄列表可能需要時間。如果你感到緊張,你可以隨時退出C-g

2

isearch會這樣做。控制,然後開始輸入。

因爲它是emacs的通用搜索功能,它可以直到你得到足夠的名字開始了在緩衝區匹配其他的事情。

1

@Tobias和@ jl8e都直接回答了您的問題:使用C-s(增量搜索)。沒有什麼可以補充的。

但是,如果您打算多次使用列出的文件的子集,或者您要對文件的子集執行相同的操作,並且該子集可以通過文件名模式進行標識(例如相同的前綴),則可以使用%m標記與正則表達式匹配的所有文件。標記完成後,您可以對標記的文件集(或未標記的文件集)執行各種操作。

(一個你能做的僅僅是省略從上市,因此從操作的標記或無標記的文件名的事。)

Dired是真的主要是關於檢查和操作上的文件。單例集是一種特殊情況,對標記文件進行操作的所有操作(鍵)也僅在當前行文件上操作,如果沒有標記。

3

我只想補充一點,我喜歡用這 多少與你的問題一招:

(add-hook 
'dired-mode-hook 
(lambda() 
    (define-key dired-mode-map "j" 'ido-find-file))) 

顯然,它適用於只是一個文件,它會打開它,而不是 提供大量的的東西,直接可以做一個文件, ,但至少它很快。