現在のディレクトリにC ++ソースファイルhello_world.cpp
と対応するコンパイルされた実行可能バイナリがある場合は、実行可能ファイルのファイル名、、、および(および、、、など)をhello_world
完全に無視(つまりレンダリングしない)するbashのオートコンプリート機能を使用したいと思います。コマンド。vim
vi
nano
nvim
less
cat
more
nl
head
tail
C ++ソースファイル名の補完は、クリックしてすぐに続行する必要がありますTAB
。vim 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