Bash 補全動態行為

Bash 補全動態行為

我希望根據使用上下文有兩種不同的“選項卡”行為。
我希望在bind '"\t":complete'任何時候都具有預設行為,除非使用者嘗試完成“mybashfunction”命令的參數。在這種情況下,我調用一個特殊函數來產生完成,但我希望“選項卡”像bind '"\t":menu-complete'設定一樣工作。

答案1

我相信它的 readline 庫一次只支援一種製表符完成行為。

答案2

答案3

您可以透過使用 bash 完整規則來實現這一點...

_myfunc() {
    _opts="zero one two"
    # COMPREPLY is bash built-in for array of possible completions
    COMPREPLY=()
    # cur & prev are current & previous words typed in shell
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    COMPREPLY=( $( compgen -W "${_opts}" -- ${cur} ))
    return 0
}
complete -F _myfunc myfunc

這不會影響 bash 的正常補全,但是當您按 Tab 鍵完成 myfunc 時,您將獲得“零一二”作為可能的補全。

編輯:哦,是的,將其塞入您的 bashrc 或類似檔案中,以便它來自新的 shell。

相關內容