В Debian 9 Stretch просто отредактируйте /etc/bash.bashrc и раскомментируйте:
# enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Получение No such widget
при нажатии Tab означает, что у вас есть оператор bindkey
, который привязал Tab к несуществующему виджету или виджет, к которому вы привязаны Вкладка пытается вызвать другой несуществующий виджет.
Чтобы узнать, что привязано к клавише Tab , выполните
bindkey '^I'
Это выведет что-то вроде
"^I" fzf-completion
Чтобы узнать, существует ли этот виджет:
~/.zshrc
отключитеzsh-autosuggestions
. zle -lL fzf-completion
Если виджет не не существует, приведенная выше команда вообще ничего не выведет. В таком случае вы нашли проблему. Затем вы можете исправить это, привязав клавишу Tab к виджету, который действительно существует.
Затем вы можете сделать следующее, чтобы узнать, откуда берется функция:
type fzf-completion
Это выведет что-то вроде
fzf-completion is a shell function from /path/to/fzf/completion/completion
Затем вы можете открыть файл для проверки кода. Или, если хотите, вы можете включить трассировку для этой функции, например:
functions -t fzf-completion
В любом из них попробуйте найти утверждение, подобное zle widget-name
. Затем вы можете попытаться увидеть, существует ли тот виджет, как описано выше.
Таким образом, вы можете найти точное место, где что-то идет не так, и устранить проблему.