您可以通过重写TAB(^ i)的默认绑定来实现。首先,您需要覆盖TAB绑定,然后需要构建一个调用命令的函数,最后,需要从该命令中获取输出并更新包含当前命令行的变量。
此函数采用当前命令行并将最后两个字符更改为“拥抱”。
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
它将打印出该功能正在执行的所有操作。
我在Ubuntu 11上使用bash 4.2.8(1)-release(默认)对此进行了测试。