Zsh пытается исправить команду в файл

Zsh имеет функцию, которая позволяет запрашивать исправления файлов в текущем каталоге. Например, если я скажу cd bar вместо cd baz, то zsh скажет: zsh: correct 'bar' to 'baz' [nyae]?

Обычно это работает нормально. Однако sudo, похоже, все портит. В частности, предположим, что я хочу управлять версиями моего каталога apache2 с помощью git. Я бы набрал что-то вроде sudo git add . Это правильная команда для запуска. Однако zsh подсказывал мне zsh: correct 'git' to '.git' [nyae]?, как будто он не знал, что git — это команда, поэтому думал, что я пытаюсь сослаться на папку .git.

Почему это происходит? Как я могу заставить его перестать подсказывать мне в таких ситуациях?

Спасибо!

РЕДАКТИРОВАТЬ: похоже, что zsh по умолчанию будет рассматривать все аргументы команды как файлы или каталоги. Однако я знаю, что есть некоторые функции для расширения этого. Например, если я наберу git sttab, то zsh дополнит его до stash, status или stripspace (с документацией по каждому из них). В идеале я хотел бы, чтобы zsh продолжал давать подобные советы даже с чем-то вроде sudo (поэтому я бы предпочел не делать nocorrect). Как мне настроить эту функциональность в zsh?


person Sam King    schedule 01.07.2013    source источник
comment
Странно, что вы замечаете это только с помощью sudo. Раньше я видел это для emerge/cave/paludis, eix (они принимают имена программ в качестве своих аргументов, и имена программ обычно идентичны именам их каталогов конфигурации), иногда grep, мой собственный скрипт, который запускает приложения в фоновом режиме и так далее. В результате я отключил все исправления, кроме исправления имен команд: setopt nocorrectall.   -  person ZyX    schedule 01.07.2013
comment
Проблема здесь в том, что sudoemerge/…) — это программа, а git — ее аргумент. Исправления Zsh ожидают только имена файлов (или каталогов) в аргументах программы, поэтому любая команда, которая принимает что-то, что не является именем файла, подвержена такой проблеме. И вы правы, так как sudo не является встроенной оболочкой, zsh не знает, что git это команда.   -  person ZyX    schedule 01.07.2013
comment
Благодарю вас за информацию! Я добавил больше описания к моему вопросу.   -  person Sam King    schedule 03.07.2013
comment
Нет такого понятия, как «учитывать все аргументы… по умолчанию». Завершение Zsh и исправления Zsh — это разные механизмы, и последний не настраивается. Я также хотел бы, чтобы они были объединены (т. е. исправления с использованием вариантов завершения) или, по крайней мере, исправления настраивались отдельно (хотя это потребует написания дополнительного кода авторами сценариев завершения), но эти идеи подлежат обсуждению в списке рассылки zsh. Прежде чем это будет сделано, у меня будет setopt correct с setopt nocorrectall.   -  person ZyX    schedule 03.07.2013


Ответы (1)


Либо используйте nocorrect перед самой командой, либо определите псевдоним

alias sudo="nocorrect sudo"
person Francisco    schedule 01.07.2013