Не показывать неинтересные файлы в окне завершения Emacs

Как мне запретить Emacs показывать мне все файлы, которые меня не интересуют (например, файлы резервных копий, файлы .pyc или файлы .orig), когда я: C-x C-f TAB?

Он работает в одном отношении: если я знаю, что файл, который я хочу открыть, начинается с foo, и я набираю foo TAB, тогда мини-буфер правильно автозаполняется полностью до foo .py. Он правильно игнорировал foo ~ и foo.pyc, потому что и ~, и .pyc находятся в завершения-игнорируемые-расширения. Он также правильно позволяет мне открыть любой проигнорированный файл, если я действительно хочу, набрав все буквы самостоятельно.

Однако, если я просто нажму TAB, чтобы открыть буфер списка завершения, тогда этот список будет включать файлы с расширениями в завершении-игнорируемых-расширениях, что очень затрудняет поиск то, что я ищу.

Очевидно, что код игнорирования неинтересных файлов есть и работает. Как заставить буфер списка завершения учитывать игнорируемые-завершения?

(Кстати, могу ли я заставить dired вести себя так же?)


person emacsulike    schedule 13.11.2009    source источник


Ответы (4)


Этот совет отфильтровывает файлы с расширениями, перечисленными в '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)))

Прочтите документацию по dired-x чтобы получить представление о том, что там доступно.

person Trey Jackson    schedule 13.11.2009
comment
Практически идеально! Есть ли шанс, что совет может быть изменен с учетом переменных, игнорируемых завершением? - person emacsulike; 14.11.2009
comment
Ага, теперь использует completion-ignored-extensions. - person Trey Jackson; 16.11.2009

Я бы рекомендовал использовать ido-mode для игнорирования файлов; он поставляется с Emacs по умолчанию и добавляет много других полезных улучшений, которые вы быстро полюбите. Раздел Невежество - это блаженство в этой публикации в блоге "Освоение Emacs" описывает, как игнорировать файлы, каталоги и буферы:

  • ido-ignore-buffers Берет список буферов, которые нужно игнорировать в C-x b
  • ido-ignore-directories Принимает список каталогов для игнорирования в C-x d и C-x C-f
  • ido-ignore-files Принимает список файлов для игнорирования в C-x C-f
person aculich    schedule 04.01.2012
comment
В разделе «Невежество - это блаженство» также говорится: «Я не игнорирую в Ido ничего, кроме значений по умолчанию, поскольку я предпочитаю использовать более общий completion-ignored-extensions, поскольку он работает с Ido и без него». - person Simon Shine; 30.08.2013
comment
@SimonShine Я обнаружил, что completion-ignored-extensions работает для большинства вещей, но по какой-то причине он не работает для ido-dired (который привязан к C-x d, когда включен режим Ido). Кажется, единственный способ повлиять на ido-dired - это установить ido-ignore-directories. По крайней мере, это то, что я вижу в Emacs 25.3. - person GDP2; 17.04.2018

Сосульки делает то, что вы ожидаете по умолчанию. Он всегда учитывает completion-ignored-extensions для завершения имени файла, в том числе для буфера *Completions*. И вы можете включить / выключить это игнорирование в любое время, нажав C-. в минибуфере.

Кроме того, если вы используете библиотеку completion-ignored-build.el Кевина Райда, тогда Icicles автоматически использует динамическую настройку игнорируемых расширений файлов в этой библиотеке. (Просто загрузите completion-ignored-build.el - не включайте его второстепенный режим или совет.)

person Drew    schedule 03.09.2011

Боюсь, что я не знаю ответа на вопрос о завершении. Я думаю, что это сделано намеренно - когда вы знаете имя, которое ищете, вы, вероятно, не захотите, например файл резервной копии. Но если вы не знаете, возможно, лучше иметь список всех файлов.

Однако для dired вы можете загрузить пакет dired-x при запуске (в ваш .emacs), и это обеспечивает dired-omit-mode:

(load "dired-x")

Вы можете использовать «M-x customize-variable ‹RET› dired-omit-files», чтобы установить фактические шаблоны, которые нужно игнорировать. Затем, когда вы находитесь в режиме dired, вы можете использовать M-O (букву, а не число) для включения и выключения «пропуска».

person Peter Hart    schedule 13.11.2009
comment
Хороший. Мне нравится, как dired говорит. Опущено 26 строк. (или что-то еще), когда вы открываете каталог. Я думаю, что то же самое может произойти и со списком завершения файлов, что уменьшит вашу озабоченность по поводу сокрытия файлов, которые иногда могут быть необходимы. Повторное нажатие TAB может показать все файлы (например, M-o). - person emacsulike; 14.11.2009