pemrosesan penyelesaian bash menjadi buruk, bagaimana cara debug?

9

Semuanya dimulai dengan sederhana

alias gv='gvim --remote-quiet'

dan sekarang gv Space Tabtidak memberikan apa pun di tempat yang seharusnya memberikan nama file. Anehnya,

alias gvi='gvim --remote-quiet'

bekerja seperti yang diharapkan. Saya jelas punya solusi, tetapi saya ingin tahu apa yang saya tangkap gvuntuk pemrosesan khusus. compopttidak membantu karena gvberbagi pengaturan yang sama seperti lsyang tidak menyelesaikan nama file dengan benar.

$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

The completePerintah sedikit lebih bermanfaat tetapi tidak memberitahu saya mengapa dua karakter saya mendapat dipilih untuk perubahan:

$ 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

Dari mana complete -o filenames -F _filedir_xpec gvdatangnya?

msw
sumber
1
+1 untuk kelengkapan dan <kbd> Spasi </kbd> <kbd> Tab </kbd>
Aleksandr Levchuk

Jawaban:

10

Akhirnya saya mengerti. Itu bersembunyi di /etc/bash_completionsmana - ironisnya - saya diabaikan karena tidak muncul pada nama file saya.

Bash_completions yang bermanfaat berpikir itu gvartinya ghostviewhanya mengizinkan saya untuk melengkapi nama file yang diharapkan dapat ditangani ghostview:

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

Saya pikir itu dianggap sebagai "sangat membantu". Menambahkan

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

ke ~/.bash_aliasesfile saya sudah cukup.

msw
sumber
Pujian! Pemecahan masalah hebat!
dag729