如何在Emacs Dired中快速找到文件?

时间:2013-12-13 03:09:48

标签: emacs

如果目录包含许多文件,并且我想转到名称以字母(或字符串)开头的文件(或子目录),有什么好办法吗?我知道在远程文件管理器中,人们可以按Alt键并开始键入名称,光标将在您键入时移动,我想知道Emacs是否有类似的东西。

4 个答案:

答案 0 :(得分:6)

回答此问题的最快方法是从emacs信息文件中复制一个部分。 要获得此文本类型 Ch i d m emacs ret 然后isearch为适当的子字符串忽略第一个Failing I-search或者只是转到 Ch i 的信息然后直接进入信息节点下面用 g 提到,然后键入节点名称后跟 ret

info-node (emacs) Dired and Find中的第一个是否在一个是否在一个直接缓冲区中工作:

   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.

编辑: 要以递归方式查找目录,您可以先递归列出它。

您可以通过使用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))

使用此代码段,如果为最终没有斜杠的目录调用find-file( Cx Cf ),则会获得正常的目录列表如果你在末尾用斜杠调用它,则递归列表。 不过要小心。递归目录列表可以花时间。如果你感到紧张,你可以随时退出 C-g

答案 1 :(得分:3)

我只想添加一个我喜欢使用的技巧 与你的问题有些相关:

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

显然它仅适用于一个文件,而是打开它 提供可以对文件执行的大量操作, 但至少它很快。

答案 2 :(得分:2)

isearch会这样做。 control-s,然后开始输入。

由于它是emacs的通用搜索功能,它可以开始匹配缓冲区中的其他内容,直到你得到足够的名称。

答案 3 :(得分:1)

@Tobias和@ jl8e都直接回答了您的问题:使用C-s(增量搜索)。没有什么可以补充的。

但是,如果您要多次使用所列文件的子集,或者您要对文件的子集执行相同的操作,并且可以通过文件名模式识别该子集(例如,相同的前缀),然后您可以使用%m标记与正则表达式匹配的所有文件。标记后,您可以对标记的文件集(或未标记的文件集)执行各种操作。

(您可以做的一件事就是从列表中省略标记或未标记的文件名,从而省略操作。)

Dired主要是关于检查和操作 的文件。单例集是一种特殊情况,对标记文件进行操作的所有操作(键)也只对当前行的文件进行操作(如果没有标记的话)。