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

inc*_*man 9 emacs dired

我将以下内容放在我的.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$"))
Run Code Online (Sandbox Code Playgroud)

C-x d仍然显示.pdf和.tex文件.我在最后一行中的语法错了吗?

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

mem*_*lex 15

一个简单而且非常通用的解决方案,它不依赖于任何额外的东西,是C-u s改变ls标志并立即刷新(也就是说,也C-u s需要刷新,因此涉及的输入很少).通常你会想删除-a以隐藏dotfiles.但是你可以在shell控制台中完成你已经能够做的所有事情,这远远超过简单的切换模式所能提供的(以一些额外的按键成本为代价).并且有可用的先前标志的历史,因此"切换"也非常快.


bar*_*ddu 12

你的正则表达式将匹配*-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$"))
Run Code Online (Sandbox Code Playgroud)

更新:默认情况下,dired-omit-files regexp过滤掉特殊目录....如果您不想要这种行为,您可以只覆盖默认值(而不是使用concat继承它们):

(setq dired-omit-files "^\\.[^.]\\|\\.pdf$\\|\\.tex$")
Run Code Online (Sandbox Code Playgroud)

正则表达式^\\.[^.]将匹配任何长度为2+的字符串,以点开头,其中第二个字符是除点本身之外的任何字符.它并不完美(不会像"..foo"那样匹配文件名),但大部分时间都应该可以.