Как получить 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$"))

Но C-x d по-прежнему показывает мне файлы.pdf и.tex. Я неправильно понял синтаксис в последней строке?

Бонусный вопрос: есть ли способ заставить Dired скрывать скрытые каталоги, например папки.git?

2 ответа

Решение

Ваше регулярное выражение будет соответствовать *-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 regexp отфильтровывает специальные каталоги . а также .., Если вам не нужно это поведение, вы можете просто переопределить значения по умолчанию (вместо того, чтобы наследовать их с помощью concat):

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

Регулярное выражение ^\\.[^.] будет соответствовать любой строке длиной 2+, начиная с точки, где вторым символом является любой символ, кроме самой точки. Он не идеален (не будет совпадать с именами файлов, такими как "..foo"), но в большинстве случаев должен быть в порядке.

Простое и очень общее решение, которое не зависит от каких-либо дополнительных C-u s изменить ls флаги и сразу же обновить (то есть C-u s также заботится об освежении, поэтому ввод текста очень мал) Обычно вы хотите удалить -a скрыть точечные файлы. Но вы можете делать все, что вы уже можете делать, в консоли оболочки, что гораздо больше, чем может предложить простой режим переключения (за счет некоторых дополнительных нажатий клавиш). И есть история предыдущих доступных флагов, так что переключение тоже довольно быстро.

Другие вопросы по тегам