9

Началось все с простого

alias gv='gvim --remote-quiet'

и теперь gv Space Tab ничего не дает там, где обычно должны давать имена файлов. Как ни странно,

alias gvi='gvim --remote-quiet'

работает как положено. У меня явно есть обходной путь, но я хотел бы знать, что ловит мой gv для специальной обработки. compopt не поможет, так как gv использует те же настройки, что и ls что правильно выполняет завершение имени файла.

$compopt gv
compopt +o bashdefault +o default +o dirnames -o filenames +o nospace +o plusdirs gv
$ compopt ls
compopt +o bashdefault +o default +o dirnames -o filenames +o nospace +o plusdirs ls

complete команда немного более полезна, но она не говорит мне, почему два моих персонажа были выбраны для изменения:

$ complete -p gv
complete -o filenames -F _filedir_xspec gv
$ complete -p ls
complete -o filenames -F _longopt ls
$ complete -p echo
bash: complete: echo: no completion specification
$ alias gvi='gvim --remote-silent'
$ complete -p gvi
bash: complete: gvi: no completion specification

Откуда complete -o filenames -F _filedir_xpec gv ?

1 ответ1

10

Наконец-то я понял. Он прятался в /etc/bash_completions который - по иронии судьбы - я упустил из виду, так как он не появился в моих дополнениях к имени файла.

Полезный bash_completions считает, что gv означает ghostview поэтому он позволит мне только завершить имена файлов, которые, как он ожидает, может обработать ghostview:

complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?' gv ggv kghostview

Я думаю, это считается "чертовски полезным". Добавление

alias gv='gvim --remote-silent'
complete -r gv 

к моему файлу ~/.bash_aliases было достаточно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .