コマンドラインエイリアスでタブ補完を取得しようとしています。たとえば、次のエイリアスを定義したとします:
alias apt-inst='sudo aptitude install'
タブキーを押したときにaptitudeによって提供される完了を取得する方法はありますか?つまり、「sudo aptitude install gnumer」と入力してタブを押すと、aptitudeはこれをgnumericに完了します。不確実性がある場合は、gnumerで始まるすべての利用可能なパッケージを一覧表示します。エイリアスを使用してそれを行う場合、何も–完了なし。
承認された回答:
Ubuntuフォーラムにはこれに関する素晴らしいスレッドがあります。 Ole Jは、次のエイリアス補完定義関数を提案しています。
function make-completion-wrapper () {
local function_name="$2"
local arg_count=$(($#-3))
local comp_function_name="$1"
shift 2
local function="
function $function_name {
((COMP_CWORD+=$arg_count))
COMP_WORDS=( "[email protected]" ${COMP_WORDS[@]:1} )
"$comp_function_name"
return 0
}"
eval "$function"
echo $function_name
echo "$function"
}
これを使用してエイリアスの補完関数を定義し、その関数をエイリアスの補完機能として指定します。
make-completion-wrapper _apt_get _apt_get_install apt-get install
complete -F _apt_get_install apt-inst
常に使用される引数を既存のプログラムに追加するためにエイリアスを使用することを好みます。たとえば、grep
を使用します 、常にデバイスとバイナリファイルをスキップしたいので、grep
のエイリアスを作成します 。 grepbin
などの新しいコマンドを追加する場合 、~/bin
でシェルスクリプトを使用しています フォルダ。そのフォルダがパスにある場合、自動補完されます。