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

Posted

技术标签:

【中文标题】不要在 Emacs 完成窗口中显示无趣的文件【英文标题】:Don't show uninteresting files in Emacs completion window 【发布时间】:2010-12-16 10:35:41 【问题描述】:

当我: 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 的行为类似吗?)

【问题讨论】:

【参考方案1】:

这条建议会过滤掉带有'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,了解那里有什么可用的。

【讨论】:

几乎完美!是否有机会修改建议以尊重变量完成忽略扩展? 是的,现在使用completion-ignored-extensions【参考方案2】:

我建议使用ido-mode 来忽略文件;它默认随 Emacs 一起提供,并添加了许多其他有用的增强功能,您将很快学会爱上这些增强功能。 Ignorance is Bliss section from this Mastering Emacs blog post 介绍了如何忽略文件、目录和缓冲区:

ido-ignore-buffersC-x b 中获取要忽略的缓冲区列表 ido-ignore-directoriesC-x dC-x C-f 中获取要忽略的目录列表 ido-ignore-filesC-x C-f 中获取要忽略的文件列表

【讨论】:

因为它的无知是幸福部分还说:我不会忽略 Ido 中超出默认值的任何内容,因为我更喜欢使用更通用的 completion-ignored-extensions,因为它可以在有和没有 Ido 的情况下使用。跨度> @SimonShine 我发现completion-ignored-extensions 适用于大多数事情,但由于某种原因它不适用于ido-dired(当Ido 模式打开时,它绑定到C-x d)。对ido-dired 产生影响的唯一方法似乎是设置ido-ignore-directories。至少,这是我在 Emacs 25.3 中看到的。【参考方案3】:

Icicles 默认执行您期望的操作。对于文件名完成,它始终尊重completion-ignored-extensions,包括缓冲区*Completions*。您可以随时通过点击迷你缓冲区中的 C-. 来打开/关闭此忽略。

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

【讨论】:

【参考方案4】:

恐怕我不知道完成的答案。我认为这是设计使然-当您知道要查找的名称时,您可能不想要例如备份文件。但如果您不知道,最好列出所有文件。

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

(load "dired-x")

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

【讨论】:

不错。我喜欢 dired 说“省略 26 行”的方式。 (或其他)当你打开一个目录。我认为文件完成列表可能会发生同样的情况,这将减轻您对隐藏有时可能需要的文件的担忧。再次按 TAB 可以显示所有文件(如 M-o)。

以上是关于不要在 Emacs 完成窗口中显示无趣的文件的主要内容,如果未能解决你的问题,请参考以下文章

emacs怎么在标签页中打开多个文件

4.Emacs快速入门之窗口

使用 tramp 自动保存其他窗口时 Emacs 更改缓冲区

Emacs: 设置窗口标题格式

使用R会话和并排窗口启动Emacs?

在Emacs中,我们可以最大化当前活动窗口,然后在多窗口环境中恢复它吗?