Вопрос или проблема
Я работал над настройкой автозаполнения, следуя этому руководству https://thevaluable.dev/zsh-install-configure-mouseless/. Я использую MacOS, но, по какой-то причине, когда я пытаюсь автозаполнить параметры, оно не отображает полный набор опций. Вот моя конфигурация для автозаполнения:
#Completion
autoload -Uz compinit
compinit
zmodload zsh/complist
#Удивительная статья https://thevaluable.dev/zsh-install-configure-mouseless/
zstyle ':completion:*' completer _extensions _complete _approximate
zstyle ':completion:*' menu select
zstyle ':completion:*' file-sort modification
zstyle ':completion:*:*:*:*:descriptions' format '%F{green}-- %d --%f'
zstyle ':completion:*' complete-options true
zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*' #https://unix.stackexchange.com/a/259511
zstyle ':completion:*' verbose yes
zstyle ':completion:*' group-name ''
zstyle ':completion:*' list-colors 'di=34:fi=31:no=33;00'
# zstyle ':completion:*' file-list all #К сожалению, это портит цвет
#Перемещение с помощью клавиш VIM для автозаполнения
bindkey '^[[Z' reverse-menu-complete
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
Когда я пытаюсь автозаполнить параметры для встроенных команд оболочки, я получаю следующее:
❯ cp -
-- option --
-H -- следовать за символическими ссылками в командной строке в рекурсивном режиме
-L -- следовать за всеми символическими ссылками в рекурсивном режиме
-P -- не следовать за символическими ссылками в рекурсивном режиме (по умолчанию)
-R -- копировать директории рекурсивно
-X -- не копировать расширенные атрибуты или ресурсные потоки
-a -- архивный режим, то же самое, что -RpP
-f -- принудительно перезаписать существующий файл
-i -- подтвердить перед перезаписью существующего файла
-n -- не перезаписывать существующий файл
-p -- сохранять отметки времени, режим, владельца, флаги, ACL и расширенные атрибуты
-v -- показывать имена файлов по мере их копирования
Я ожидал получить полный список параметров cp
в соответствии со статьей. Может быть, это проблема MacOs с автозаполнением для zsh?
Ответ или решение
Почему автозавершение опций cp в zsh не отображает их полный набор
Вы столкнулись с проблемой того, что автозавершение в zsh не показывает полный список опций для команды cp
на вашем MacOS. Давайте разберемся в возможных причинах этой ситуации и рассмотрим пути их решения.
1. Неполная конфигурация автозавершения
Ваш конфигурационный файл ~/.zshrc
содержит несколько настроек для автозавершения. Однако, чтобы гарантировать, что zsh будет корректно показывать все доступные опции для команды cp
, убедитесь в следующих моментах:
-
Правильная инициализация complinit:
Вы уже вызываетеcompinit
, что замечательно. Тем не менее, стоит убедиться, что нет проблем с кэшированием завершений. Попробуйте пересоздать кэш:rm -f ~/.zcompdump; compinit
-
Отсутствие конфликтующих настроек:
Некоторые параметры, которые вы установили, могут влиять на вывод автозавершения. Рассмотрите возможность временно закомментировать или изменять настройки, такие как:zstyle ':completion:*' menu select
Убедитесь, что меню не мешает стандартному выводу.
2. Проверка наличия необходимых источников данных
Иногда проблема может заключаться в недостаточном наборе данных для завершения. Убедитесь, что у вас установлены все необходимые пакеты для работы с автозавершением. Для этого можно установить zsh-комплекты:
brew install zsh-completions
3. Характеристики конкретной команды
Каждая команда в UNIX-системах может иметь различные опции в зависимости от реализации. На MacOS команда cp
является частью GNU coreutils
, что может объяснить, почему некоторые параметры отсутствуют. Чтобы узнать, какие опции доступны, вы можете обратиться к документации:
man cp
4. Альтернативные подходы
Если после выполнения всех вышеуказанных шагов проблема все еще существует, вы можете попробовать использовать команды, утилиты или плагины, которые могут обеспечить более обширное автозавершение. Одним из таких решений может быть fzf
, которое предоставляет расширенные возможности для поиска и выбора файлов и команд.
Заключение
Данная проблема может возникнуть из-за множества факторов, от конфигурации zsh до особенностей самих команд. Попробуйте применить указанные выше шаги, чтобы обеспечить корректное функционирование автозавершения. Если же проблема сохранится, можно рассмотреть возможность обращения к сообществу zsh для получения дополнительной помощи. Успехов в настройках вашей среды!