繁体   English   中英

如何实现2级bash TAB自动补全

[英]How to implements 2 level bash TAB auto-completion

这是一个test.sh,我希望通过添加以下代码来具有自动完成功能:

complete -W "1level 2level" test.sh

进入.bashrs

当我输入test.sh 1并按[TAB]键时,它将帮助我自动填充1level。 但是现在我希望它可以帮助我自动完成另一列,例如:

test.sh 1level sec[TAB]

我希望我可以自定义第二列,第三列和第N列,我已经尝试过:

complete -W "secOption1 secOption2" test.sh 1level
complete -W "secOption1 secOption2" test.sh 2level

但是没有用

您可以编写自己的自动完成功能。 例如:

[STEP 100] $ echo $BASH_VERSION
4.3.30(1)-release
[STEP 101] $ cat compspec
function _compgen_foo
{   
    local cmd=$1 cur=$2 pre=$3

    if [[ $pre == "$cmd" ]]; then
        COMPREPLY=( $(compgen -W "pos1a-example pos1b-example" -- "$cur") )
        return
    fi

    if [[ $pre == pos1* ]]; then
        COMPREPLY=( $(compgen -W "pos2a-example pos2b-example" -- "$cur") )
        return
    fi
}

complete -F _compgen_foo foo
[STEP 102] $ source ./compspec
[STEP 103] $ foo <TAB>
[STEP 103] $ foo pos1
[STEP 103] $ foo pos1<TAB><TAB>
pos1a-example  pos1b-example
[STEP 103] $ foo pos1a<TAB>
[STEP 103] $ foo pos1a-example␣
[STEP 103] $ foo pos1a-example <TAB>
[STEP 103] $ foo pos1a-example pos2
[STEP 103] $ foo pos1a-example pos2<TAB><TAB>
pos2a-example  pos2b-example
[STEP 103] $ foo pos1a-example pos2
[STEP 103] $ foo pos1a-example pos2b<TAB>
[STEP 103] $ foo pos1a-example pos2b-example␣
[STEP 103] $ foo pos1a-example pos2b-example <CR>
bash: foo: command not found
[STEP 104] $

有关更多信息,请参见Bash手册中的Programmable Completion

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM