如何让Dired忽略特定扩展名的文件

10

我将以下内容添加到我的.emacs文件中:

(require 'dired-x)
(add-hook 'dired-load-hook '(lambda () (require 'dired-x)))
(setq dired-omit-files-p t)
(setq dired-omit-files
(concat dired-omit-files "\\|^\\..+$\\|-t\\.tex$\\|-t\\.pdf$"))

但是C-x d仍然显示了.pdf和.tex文件。我在最后一行语法上搞错了吗?

奖励问题:有没有办法让Dired隐藏隐藏目录,比如.git文件夹?

2个回答

16

一种简单且通用的解决方案是执行 C-u s 命令来更改 ls 命令的标志并立即刷新(也就是说,C-u s 命令会自动刷新,因此需要输入的内容非常少)。通常,您会想要删除 -a 标志以隐藏点文件。但是,您可以在shell控制台中做任何事情,这远比简单的切换模式提供了更多的功能(代价是需要额外按键操作)。而且,之前使用过的标志历史记录也是可用的,所以“切换”速度也非常快。


14

您的正则表达式将匹配 *-t.tex 文件,而不是 *.tex 文件。

在最新版本的Emacs中,只需将以下内容添加到~/.emacs文件中即可过滤您想要的内容:

(require 'dired-x)
(setq-default dired-omit-files-p t) ; this is buffer-local variable
(setq dired-omit-files
    (concat dired-omit-files "\\|^\\..+$\\|\\.pdf$\\|\\.tex$"))

更新:默认情况下,dired-omit-files正则表达式过滤掉特殊目录...。如果您不想要这种行为,您可以覆盖默认设置(而不是通过concat继承它们):

(setq dired-omit-files "^\\.[^.]\\|\\.pdf$\\|\\.tex$")

正则表达式^\\.[^.]将匹配任何长度为2或以上且以点开头的字符串,其中第二个字符是除了点本身之外的任何字符。它并不完美(无法匹配像"..foo"这样的文件名),但大多数情况下都可以使用。


谢谢!上面的代码似乎还会移除我Dired缓冲区顶部的..,这个可以让我在不需要按^的情况下向上导航。有没有一种方法可以恢复..导航,但仍然隐藏像.git这样的文件夹? - incandescentman
我该如何省略具有以下模式的文件:flycheck_*.py @barti_ddu - alper
@alper:只需添加另一个正则表达式(通过管道)如 ^flycheck_.*\\.py$。别忘了转义管道,即 \\| - barti_ddu
我的主要目标是在 find-name-dired 上完成它,这也适用于它吗?我这样问的:https://emacs.stackexchange.com/questions/59245/how-to-ignore-files-starting-with-flycheck-on-find-name-dired @barti_ddu - alper
1
@alper:在我看来,不需要。在你的情况下,我会像这样使用常规的find命令:find-dired“〜/dir”“-name \\*.py ! -name flycheck_\\*.py” - barti_ddu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接