
Я хотел бы иметь 2 разных поведения "tab" в зависимости от контекста использования.
Я хотел бы иметь поведение по умолчанию в bind '"\t":complete'
любое время, за исключением случаев, когда пользователи пытаются завершить аргументы команды "mybashfunction". В этом случае я вызываю специальную функцию для генерации завершения, но я хотел бы, чтобы "tab" работал так, как если бы bind '"\t":menu-complete'
был установлен.
решение1
Я считаю, что библиотека Readline будет поддерживать только один тип поведения автодополнения по табуляции за раз.
решение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, но когда вы нажмете Tab Complete myfunc, у вас будут «ноль, один, два» в качестве возможных завершений.
Редактировать: о да, вставьте это в свой bashrc или что-то подобное, чтобы оно использовалось в новых оболочках.