これを行うには、TAB(^ i)のデフォルトのバインディングをオーバーライドします。最初にTABバインディングをオーバーライドする必要があります。次に、コマンドを呼び出す関数を作成する必要があります。最後に、そのコマンドから出力を取得し、現在のコマンドラインを含む変数を更新する必要があります。
この関数は、現在のコマンドラインを受け取り、最後の2文字を「ハグ」に変更します。
function my_awesome_tab_completion_function () {
set -- $READLINE_LINE
command="$1"
shift
argument="$*"
argument_length=$(echo -n $argument | wc -c)
if echo $argument | grep '^$$' >/dev/null 2>&1; then
new_argument=$(echo $argument | sed 's/..$/huugs/') # put your autojump here
else
new_argument=$(compgen -d $argument)
fi
new_argument_length=$(echo -n $new_argument | wc -c)
READLINE_POINT=$(( $new_argument_length - $argument_length + $READLINE_POINT ))
READLINE_LINE="$command $new_argument"
}
あなたの例では、おそらくnew_argument行を次のように変更したいと思うでしょう:
new_argument=$(autojump $argument)
^ iバインディングをオーバーライドします。
$ bind -x '"\C-i"':'my_awesome_tab_completion_function'
次に、それが機能することをテストします。
$ cd /ro<TAB>
changes my command to:
$ cd /root
通常の補完は引き続き機能するので、cd $$ ...などを実行して$$部分をテストできます
問題が発生した場合は、詳細モードをオンにします。
$ set -x
関数が実行しているすべてを出力します。
私はbash 4.2.8(1)-release(デフォルト)を使用してUbuntu 11でこれをテストしました。