Непонятная привязка клавиш, функция/параметр или завершение, вызванное «Нет такого виджета», когда я нажимаю вкладку для завершения

В 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
0
17.07.2020, 10:58
1 ответ

Получение No such widgetпри нажатии Tab означает, что у вас есть оператор bindkey, который привязал Tab к несуществующему виджету или виджет, к которому вы привязаны Вкладка пытается вызвать другой несуществующий виджет.


Чтобы узнать, что привязано к клавише Tab , выполните

bindkey '^I'

Это выведет что-то вроде

"^I" fzf-completion

Чтобы узнать, существует ли этот виджет:

  1. В файле ~/.zshrcотключитеzsh-autosuggestions.
  2. Перезагрузите терминал.
  3. Тогда сделайте
    zle -lL fzf-completion
    

Если виджет не не существует, приведенная выше команда вообще ничего не выведет. В таком случае вы нашли проблему. Затем вы можете исправить это, привязав клавишу Tab к виджету, который действительно существует.


Если приведенная выше команда выводит что-то вроде этого :```ш зле -Н фзф -доработка ```или, возможно, что-то вроде этого ```ш zle -C полный -слово.complete -слово _основной _полный ```тогда виджет существует. В этом случае _последнее _слово в выводе сообщает вам имя функции, которая реализует виджет.

Затем вы можете сделать следующее, чтобы узнать, откуда берется функция:

type fzf-completion

Это выведет что-то вроде

fzf-completion is a shell function from /path/to/fzf/completion/completion

Затем вы можете открыть файл для проверки кода. Или, если хотите, вы можете включить трассировку для этой функции, например:

functions -t fzf-completion

В любом из них попробуйте найти утверждение, подобное zle widget-name. Затем вы можете попытаться увидеть, существует ли тот виджет, как описано выше.


Таким образом, вы можете найти точное место, где что-то идет не так, и устранить проблему.

1
18.03.2021, 23:19

Теги

Похожие вопросы