Можно ли заставить Zsh прекратить попытки исправить аргументы, которые не являются файлами, на файлы из текущего каталога, не отключая коррекцию полностью или не ограничивая ее setopt CORRECT
(исправлением только команды)?
Например, если CORRECT_ALL
задано значение setopt
, происходит следующее:
gris@arefiev: ~% cd srcc
change srcc to src-nyae? n
Пока все хорошо (аргумент cd
должен быть файлом). Однако,
gris@arefiev: ~% man zile
change zile to .zile-nyae?
Что? Я бы ожидал, что он исправит zile
когда .zile
вызывается man
с -C
опцией. Он также пытается исправить параметры хоста ssh
, первые аргументы sudo
и т. д., что действительно раздражает.
Мне приходится прибегать к костылю: set alias man='nocorrect man'
и т. д. и т. п. для каждой затронутой команды, но очевидно, что это не лучшее решение. Мне также не нравится CORRECT
и я бы предпочел костыль plus, CORRECT_ALL
чем просто CORRECT
.
Zsh — это zsh 4.3.17 (x86_64-unknown-linux-gnu)
дистрибутив Debian.
Обновлять: вот мой.zshrc
http://pastebin.com/67mykgRv
решение1
Zsh поставляется с большим набором дополнений, но меньшим набором исправлений. Есть много команд, для которых дополнение полезно, но не исправление; например, полезно завершать аргументы mkdir
(для создания каталогов внутри существующих каталогов), но не исправлять их. Опция correct_all
очень жесткая, так как она включает исправление везде; к сожалению, нет опции исправления только при предоставлении набора правильных входных данных.
Вы можете настроить исправления для данной команды, установивcorrections
тег и настройте, следует ли выполнять исправление, сделав_correct
частьmatcher-list
или нет. Они устанавливаются с помощьюzstyle
встроенный.
решение2
Мне кажется, что вы что-то упускаете в своем дистрибутиве. Большинство реализаций ZSH поставляются с большим набором предварительно настроенных настроек завершения для ZSH, которые интеллектуально завершаются на основе команды и позиции аргумента. Например, в моей системе естьzsh-дополненияпакет. При установке и правильной загрузке man
завершается только тем, что находится на страницах руководства, а не файлами, ssh
только именами хостов, ssh -l
завершается именами пользователей системы, но затем ssh -l caleb
возвращается к завершению именами хостов и т. д.
Вам следует изучить, какие пакеты zsh доступны и правильно ли вы загружаете конфигурации по умолчанию. Вам не придется настраивать кучу ручных переопределений для стандартных команд, таких как те, что вы перечислили в своем вопросе.