Как заставить zsh отдавать предпочтение определенным типам файлов при автозаполнении

У меня есть много файлов с одинаковым именем, но разными типами файлов в одном каталоге:

foo.aux foo.bbl foo.blg foo.log foo.out foo.pdf foo.tex

Я хотел бы иметь возможность набирать foo[Tab] и чтобы zsh всегда автозаполнял .tex, затем .pdf, а затем любой порядок, который нравится zsh. Можно ли как-то настроить такие параметры автозаполнения?

Я использую oh-my-zsh, если это уместно.

Спасибо за любую помощь, которую вы можете предложить!


person campbellC    schedule 20.01.2016    source источник
comment
Возможно, вы слишком многого требуете от _path_files, который сортирует результаты в соответствии с file-sort (ищите файловую сортировку в zsh.sourceforge.net/Doc/Release/Completion-System.html), которые могут быть size, links, modification и т. д., только стандартные.   -  person 4ae1e1    schedule 20.01.2016
comment
Однако для некоторых команд вы можете написать собственное определение завершения, чтобы предпочесть одни расширения другим. Подсказка: используйте files -g '*.tex' для tex, затем files -g '*.pdf' для pdf и т. д.   -  person 4ae1e1    schedule 20.01.2016
comment
@ 4ae1e1 Большое спасибо, я пойду на это, так как большую часть времени я использую vim для своих tex-файлов. Понятно, что это вообще невыполнимо. Спасибо за помощь!   -  person campbellC    schedule 21.01.2016


Ответы (1)


Вы можете использовать параметр file-patterns для категоризации файлов любым удобным для вас способом. В вашем случае это должно работать:

# First, we define how to categorize the files.
zstyle ':completion:*' file-patterns '
    *.tex(D-^/*):tex-files:"TEX file"
    *.pdf(D-^/*):pdf-files:"PDF file"
    *(D-*):executables:"executable file"
    *(D-/):directories:"directory"
    ^*.(tex|pdf)(D-^/*):files:"other file"
'

# Then, we define in what order they should appear.
zstyle ':completion:*' group-order tex-files pdf-files executables directories files

# Finally, we need to enable group names, or the group order won't work.
zstyle ':completion:*' group-name ''

Документация:

person Marlon Richert    schedule 06.12.2020