обработка завершения bash пошла плохо, как отладить?

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взялись?

MSW
источник
1
+1 за полноту и <kbd> пробел </ kbd> <kbd> Tab </ kbd>
Александр Левчук

Ответы:

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файла было достаточно.

MSW
источник
Комплименты! Великая проблема!
dag729