le traitement d'achèvement bash a mal tourné, comment déboguer?

9

Tout a commencé par un simple

alias gv='gvim --remote-quiet'

et ne gv Space Tabdonne plus rien là où il devrait normalement donner des noms de fichiers. Bizarrement,

alias gvi='gvim --remote-quiet'

fonctionne comme prévu. J'ai clairement une solution de contournement, mais j'aimerais savoir ce qui m'attrape gvpour un traitement spécial. compoptne sert à rien car il gvpartage les mêmes paramètres que pour la lscomplétion correcte du nom de fichier.

$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

La completecommande est légèrement plus utile, mais elle ne me dit pas pourquoi mes deux personnages ont été sélectionnés pour être modifiés:

$ 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

D'où complete -o filenames -F _filedir_xpec gvvenait-il?

msw
la source
1
+1 pour être complet et <kbd> Espace </kbd> <kbd> Onglet </kbd>
Aleksandr Levchuk

Réponses:

10

Je l'ai enfin compris. Il se cachait dans /etc/bash_completionslequel - ironiquement - j'ai négligé car il n'apparaissait pas sur mes complétions de nom de fichier.

L'utile bash_completions pense que cela gvsignifie ghostviewqu'il ne me permettra que de compléter les noms de fichiers qu'il s'attend à ce que ghostview puisse gérer:

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

Je pense que cela compte comme "trop ​​sacrément utile". Ajouter

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

à mon ~/.bash_aliasesdossier était suffisant.

msw
la source
Compliments! Grand dépannage!
dag729