zsh меню выбора не работает

Вопрос или проблема

На моем предыдущем ноутбуке, когда я вводил 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, чтобы осталась только та конфигурация, которая вам действительно необходима.

Вот инструкция по приведению этих настроек в порядок:

  1. Откройте файл настроек Zsh: Найдите ваш .zshrc файл в домашней директории, воспользовавшись редактором, таким как nano, vim или любым другим на ваше усмотрение.

    nano ~/.zshrc
  2. Найдите и исправьте настройки стилей: Убедитесь, что у вас не более одного определения menu select. Возможно, вы захотите оставить только одно из правил, например:

    zstyle ':completion:*' menu select=2

    Или, если предпочтительнее использовать длинный формат:

    zstyle ':completion:*' menu select=long
  3. Сохраните и закройте файл: После редактирования сохраните изменения и закройте текстовый редактор. В nano, например, сохраните, используя CTRL + O, и закройте, используя CTRL + X.

  4. Перезапустите оболочку Zsh: Чтобы изменения вступили в силу, перезапустите сессию оболочки, введя команду:

    exec zsh

После этих изменений вы должны заметить восстановление функции меню выбора при использовании автодополнения через ls или аналогичные команды. Если проблемы сохраняются, убедитесь, что отсутствуют другие конфликты или конфигурации, которые могут быть заимствованы из других источников, например, из /etc/zsh/zshrc или глобальных конфигурационных файлов.

Ваш случай — яркий пример того, как важны правильные настройки и понимание механизмов конфигурации в терминале для эффективной работы. Правильные действия в состоянии устранить большинство проблем с автодополнением и сделать вашу работу более удобной и эффективной.

Оцените материал
Добавить комментарий

Капча загружается...