Вопрос или проблема
На моем предыдущем ноутбуке, когда я вводил ls foobar/
, я мог перемещаться по меню и выбирать элементы. Сейчас я не могу. Вот что у меня настроено в Ubuntu 22.04:
autoload -Uz compinit
compinit
zstyle ':completion:*' auto-description 'specify: %d'
zstyle ':completion:*' completer _expand _complete _correct _approximate
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
eval "$(dircolors -b)"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
zstyle ':completion:*' menu select=long
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true
Вот что я добавил из моего предыдущего .zshrc, это не решило проблему:
zmodload zsh/complist
bindkey -M menuselect ' ' accept-and-menu-complete
Согласно моим быстрым исследованиям, проблема автора вызвана несколькими правилами zstyle ':completion:*' menu select
, где последнее правило имеет приоритет. Таким образом, выбор работает в соответствии с zstyle ':completion:*' menu select=long
.
Решение: Просто удалите лишнее правило zstyle.
P.S. Такие предопределенные конфигурации .zshrc
копируются из /etc/zsh/newuser.zshrc.recommended
при первой инициализации zsh, если пользователь выбрал соответствующий вариант в мастер установки. Точная строка https://github.com/zsh-users/zsh/blob/8701313c615394654f47586c9a4961ac8893bf5b/Functions/Newuser/zsh-newuser-install#L956
Ответ или решение
Здравствуйте,
Столкнувшись с проблемой, когда меню выбора в Zsh при выполнении команды ls foobar/
не работает, важно понимать, что данная проблема часто связана с настройками конфигурации оболочки Zsh. Ваш сценарий наиболее вероятно связан с конфликтующими настройками стилей, которые влияют на поведение автодополнения в терминале.
Теория
В Zsh используется система подбора параметров (completion system), которая позволяет настраивать автодополнение и интегрировать меню выбора для более удобной работы в командной строке. Настройка выбора в меню обычно осуществляется через переменные стилей (zstyle
), которые управляют различными аспектами поведения системы автодополнения. Команда zstyle ':completion:*' menu select=...
регулирует возможность выбора из меню автодополнения.
Когда вы добавляете несколько конфигураций zstyle
, последний из них, как правило, имеет приоритет, что может приводить к конфликтам и нежелательному поведению, как в вашем случае. Это свойство завершающей системы Zsh играет ключевую роль в определении того, как она будет работать.
Пример
Ваш текущий конфигурационный файл .zshrc
содержит следующие строки, отвечающие за настройки меню:
zstyle ':completion:*' menu select=2
zstyle ':completion:*' menu select=long
Присутствие нескольких правил для menu select
может привести к тому, что более раннее правило будет переписано последующим. В данной конфигурации правило zstyle ':completion:*' menu select=long
имеет наибольший приоритет.
Применение
Чтобы меню выбора снова заработало, вы можете убрать излишние или конфликтующие настройки. Предлагается удалить или изменить одну из строчек, отвечающих за параметр menu select
, чтобы осталась только та конфигурация, которая вам действительно необходима.
Вот инструкция по приведению этих настроек в порядок:
-
Откройте файл настроек Zsh: Найдите ваш
.zshrc
файл в домашней директории, воспользовавшись редактором, таким какnano
,vim
или любым другим на ваше усмотрение.nano ~/.zshrc
-
Найдите и исправьте настройки стилей: Убедитесь, что у вас не более одного определения
menu select
. Возможно, вы захотите оставить только одно из правил, например:zstyle ':completion:*' menu select=2
Или, если предпочтительнее использовать длинный формат:
zstyle ':completion:*' menu select=long
-
Сохраните и закройте файл: После редактирования сохраните изменения и закройте текстовый редактор. В
nano
, например, сохраните, используяCTRL + O
, и закройте, используяCTRL + X
. -
Перезапустите оболочку Zsh: Чтобы изменения вступили в силу, перезапустите сессию оболочки, введя команду:
exec zsh
После этих изменений вы должны заметить восстановление функции меню выбора при использовании автодополнения через ls
или аналогичные команды. Если проблемы сохраняются, убедитесь, что отсутствуют другие конфликты или конфигурации, которые могут быть заимствованы из других источников, например, из /etc/zsh/zshrc
или глобальных конфигурационных файлов.
Ваш случай — яркий пример того, как важны правильные настройки и понимание механизмов конфигурации в терминале для эффективной работы. Правильные действия в состоянии устранить большинство проблем с автодополнением и сделать вашу работу более удобной и эффективной.