不要在 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-buffers
在 C-x b 中获取要忽略的缓冲区列表
ido-ignore-directories
在 C-x d 和 C-x C-f 中获取要忽略的目录列表
ido-ignore-files
在 C-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-variable
【讨论】:
不错。我喜欢 dired 说“省略 26 行”的方式。 (或其他)当你打开一个目录。我认为文件完成列表可能会发生同样的情况,这将减轻您对隐藏有时可能需要的文件的担忧。再次按 TAB 可以显示所有文件(如 M-o)。以上是关于不要在 Emacs 完成窗口中显示无趣的文件的主要内容,如果未能解决你的问题,请参考以下文章