TAB (^ i)의 기본 바인딩을 대체하여이를 수행 할 수 있습니다. 먼저 TAB 바인딩을 재정의 한 다음 명령을 호출하는 함수를 작성해야합니다. 마지막으로 해당 명령의 출력을 가져 와서 현재 명령 행이 포함 된 변수를 업데이트해야합니다.
이 함수는 현재 명령 행을 사용하여 마지막 두 문자를 'huugs'로 변경합니다.
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
기능이 수행하는 모든 것을 인쇄합니다.
우분투 11에서 bash 4.2.8 (1) -release (기본값)를 사용하여 이것을 테스트했습니다.