不要在Emacs完成窗口中显示不感兴趣的文件

时间:2009-11-13 20:18:26

标签: emacs autocomplete find dot-emacs

当I:Cx Cf TAB 时,如何阻止Emacs向我展示我不感兴趣的所有文件(例如〜备份文件,.pyc文件或.orig文件)?

它在一个方面工作:如果我知道我要打开的文件以 foo 开头,我键入foo TAB ,那么迷你缓冲区正确地自动填充所有方式到foo.py.它正确地忽略了foo~和foo.pyc,因为〜和.pyc都在completion-ignored-extensions中。它也正确地让我打开被忽略的文件,如果我真的想通过输入我自己的所有字母。

但是,如果我只是点击 TAB 来启动完成列表缓冲区,那么该列表包含 completion-ignored-extensions 中具有扩展名的文件,这使得它非常很难找到我正在寻找的东西。

显然,忽略不感兴趣的文件的代码是有效的。如何获得完成列表缓冲区以尊重 completion-ignored-extensions

(顺便说一下,我可以让dired表现得类似吗?)

4 个答案:

答案 0 :(得分:22)

这条建议过滤掉'completion-ignored-extensions中列出的扩展名的文件:

(defadvice completion--file-name-table (after 
                                        ignoring-backups-f-n-completion 
                                        activate)
  "Filter out results when they match `completion-ignored-extensions'."
  (let ((res ad-return-value))
(if (and (listp res)
     (stringp (car res))
     (cdr res))                 ; length > 1, don't ignore sole match
    (setq ad-return-value
              (completion-pcm--filename-try-filter res)))))

注意:这不会影响dired

对于dired问题,请将其添加到.emacs

(eval-after-load "dired"
  '(require 'dired-x))

(add-hook 'dired-mode-hook
          (lambda ()
            (dired-omit-mode 1)))

阅读documentation for dired-x以了解那里有什么。

答案 1 :(得分:7)

我建议使用ido-mode忽略文件;它默认带有Emacs,并添加了许多其他有用的增强功能,您很快就会爱上它们。 Ignorance is Bliss section from this Mastering Emacs blog post涵盖了如何忽略文件,目录和缓冲区:

  • ido-ignore-buffers C-x b中选择要忽略的缓冲区列表
  • ido-ignore-directories C-x d C-x C-f
  • 中取一个要忽略的目录列表
  • ido-ignore-files C-x C-f中选择要忽略的文件列表

答案 2 :(得分:3)

Icicles默认执行您的预期。对于文件名完成,它总是尊重completion-ignored-extensions,包括缓冲区*Completions*。你可以随时通过在迷你缓冲区中点击 C - 。来打开/关闭这个忽略。

此外,如果您使用Kevin Ryde的库completion-ignored-build.el,则 Icicles 会自动利用该库动态调整忽略的文件扩展名。 (只需加载completion-ignored-build.el - 不要启用其次要模式或建议。)

答案 3 :(得分:1)

我不知道完成的答案,我很害怕。我认为这是设计的 - 当你知道你正在寻找的名字时,你可能不希望例如备份文件。但是当你不知道时,最好有一份所有文件的清单。

但是,对于dired,你可以在启动时加载'dired-x'包(在.emacs中),这提供了dired-omit-mode:

(load "dired-x")

您可以使用'M-x customize-variable< RET> dired-omit-files'来设置要忽略的实际模式。然后当你处于直接模式时,你可以使用M-O(字母,而不是数字)来打开和关闭“省略”。