オートコンプリートが特定の完成を無視するようにする方法

オートコンプリートが特定の完成を無視するようにする方法

Bashにオートコンプリート機能を提供しました。プログラム名の一部を入力してTabキーを押すと、コマンド全体が表示されます。期待どおりに動作し、苦情はありません。

しかし、私の設定では、名前付きのエイリアスを定義しましたflexo(同じ名前のコンピュータにログインします)。私がこれを入力すると、私はfleTABこれflexがマシンで完全に利用可能なプログラムであるので得ます。この特定の完了を無視するように完了するようにどのように指示できますか?つまり、私はfleTAB終わり、完全に無視したいとflexo思いますflex。ありがとうございます。

ベストアンサー1

タブ補完アルゴリズムを使用してプールから複数のアイテムをインポートすることは、思ったよりも複雑です。実際に行うことはできますが、簡単、効率的、または使用することはお勧めできません。

対照的に、@jasonwryanはコマンド名について別のことを思い出さなければならないことが正しいです。ただし、1つの単語(コマンド名でサーバー名など)を使用する代わりに、残りのUnixと同様に、モデルをマルチワードモデルに切り替えることをお勧めします。コマンド名のタブ補完は、パラメータのタブ補完とは大きく異なり、非常に簡単です。

「s」などの短く簡単なエイリアスまたは接続エイリアスを設定しますが、ホスト名は設定しないでください。次に、ホスト名のみがオートコンプリートされるコマンドのカスタム完了ルーチンを設定します。たとえば、次のようになります。

alias s=ssh
complete -F _known_hosts_real s

これを行うには、カスタム関数を作成することもできます。

alias s=ssh
_my_hosts() {
    type compopt &>/dev/null && compopt -o nospace
    COMPREPLY=( $( compgen -S = -W 'flexo mexo dexo' -- "$cur") )
}
complete -F _my_hosts s

おすすめ記事