Bash 補完の動的動作

Bash 補完の動的動作

使用コンテキストに応じて、「タブ」の 2 つの異なる動作を設定したいと思います。ユーザーが「mybashfunction」コマンドの引数を補完しようとしているとき以外は、常に
デフォルトの動作を設定したいと思います。この場合、補完を生成するために特別な関数を呼び出しますが、「タブ」は設定されているbind '"\t":complete'場合と同じように動作するようにしたいと思います。bind '"\t":menu-complete'

答え1

readline ライブラリは、一度に 1 種類のタブ補完動作のみをサポートすると思われます。

答え2

これがあなたが探しているものですか?Bash: メニュー補完は一致するものが少ない場合のみ

答え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 の通常の補完には影響しませんが、タブ補完で myfunc を入力すると、補完候補として「ゼロ、1、2」が表示されます。

編集: ああ、これを bashrc などに貼り付けて、新しいシェルでソースされるようにします。

関連情報