
私の.bash_aliases
ファイルには、次のようないくつかのエイリアスがあります。
shopt -s expand_aliases
alias emx='emacs'
alias em='emacs -nw'
alias gv='gvim'
alias v='vi'
alias ev='evince'
私はそれを使用し、オートコンプリートのために[タブ]を押すと動作します。
:~/$ emx main-0 [press tab]
main-04.cpp main-05.cpp main-06.cpp main-06-test.cpp
または
:~/$ em main-0 [press tab]
main-04.cpp main-05.cpp main-06.cpp main-06-test.cpp
それは働きます(また働きます) 。emx
ただし、使用しようとすると機能しません。em
ev
gv
v
:~/$ gv main-0 [press tab]
<nothing happens>
なぜ? ?
答え1
これが混乱している場合は、expand_aliases
コマンドを処理するときにエイリアスを確認するかどうかを判断するのはまったく異なる問題です。終わる。
各コマンドに対して完了を設定したようです。complete
(引数なし)出力を確認してください。gv
条約によると、蜃気楼gv
コマンドを実行するので、PS/EPS/PDFファイルのみを検索すると完了することができます。
答え2
まず、Bashオートコンプリートは、エイリアスを解析せずにコマンドラインに入力した内容のみを読み取ります。命令名を入力すると命令名が読み出されます。エイリアスを入力すると、エイリアスが読み込まれます。したがって、完了に関する限り、あなたの出来事とは何の関係もありませんgv
。gvim
実際には、gv
次の定義があります。バッシュ完了スクリプトは次のとおりです。
_install_xspec '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.bz2|.BZ2|.Z))' gv ggv kghostview
complete -F _filedir_xspec gv
したがって、デフォルトでは圧縮されていないpsファイルとpdfファイルとのみ一致します。
AFAIKこれを処理する方法は2つあります。
エイリアスの完成を
gv
別の関数に設定してください。たとえば、_longopt
あなたの場合:complete -F _longopt gv
一般的なエイリアス補完関数を作成してから実行してみてください
gv
。幸いなことに、誰かがすでにこれを行っています。https://github.com/cykerway/complete-alias