特定のコマンドと特定のファイル形式の組み合わせに対して bash オートコンプリートを無効にします。

特定のコマンドと特定のファイル形式の組み合わせに対して bash オートコンプリートを無効にします。

現在のディレクトリにC ++ソースファイルhello_world.cppと対応するコンパイルされた実行可能バイナリがある場合は、実行可能ファイルのファイル名、、、および(および、、、など)をhello_world完全に無視(つまりレンダリングしない)するbashのオートコンプリート機能を使用したいと思います。コマンド。vimvinanonvimlesscatmorenlheadtail

C ++ソースファイル名の補完は、クリックしてすぐに続行する必要がありますTABvim hello_wor

この行動をどのように達成できますか?

ベストアンサー1

これらのコマンドに対してプログラム可能な完成関数を直接作成できます。これを呼び出して設定し_cppてみましょう。

complete -F _cpp vim vi nano nvim less cat more nl head tail

今は完全な関数を作成しませんが、次のように一致を作成(および削除)します。

files=( $(compgen -f hello_) )
COMPREPLY=()
for word in "${files[@]}"; do
    if [[ $word = *.cpp ]]; then
        COMPREPLY+=("$word")
    else
        if [[ ! -f "${word}.cpp" ]]; then
            COMPREPLY+=("$word")
        fi
    fi
done

これは以下をtouch hello_world hello_world.cpp hello_world2提供します:

echo ${COMPREPLY[@]}
hello_world.cpp hello_world2

おすすめ記事