如何部分禁用zsh的自动更正


36

zsh的自动校正功能对我很有帮助,但它并不总是能提供正确的结果。

~$ sudo vim somefile
zsh: correct 'vim' to '.vim' [nyae]? 

但是我想要的是一个永不选项,它可以阻止它永远纠正那些命令。

我怎样才能做到这一点?

Answers:


53

您可以通过在.zshrc中给它们加上别名'nocorrect'来为zsh通知特定命令不自动校正(例如:http : //dzen.geekmode.org/wiki/wiki.cgi/-main/ZshConfiguration)。 :

alias vim='nocorrect vim' 

或者,如果此白名单过程变得令人沮丧,则可以使用.zshrc中的以下命令完全关闭自动更正功能。

对于较新版本的zsh,请使用:

 unsetopt correct

对于旧版本的zsh使用:

 unsetopt correct-all

修改为:这是该主题的先前讨论-zshcorrectall功能的例外?


1
尽管这适用于vim命令开始时的情况,但不适用于诸如的命令bundle exec cucumber <some_specific_feature> && bundle exec rspec <some_specific_spec>。我为rspec添加了别名。有小费吗?
马丁·富特

@MartinFoot:如果您使用oh-my-zsh,捆绑程序插件可能会帮助您:coderwall.com/p/weixga
brafales 2012年

1
在新版本中unsetopt correct_all更改为unsetopt correct
antitoxic

@antitoxic:我想查看“新版本”在版本号方面的含义,但是即使在今天的git checkout(zsh 5.0.2 + 31433)中,手册zshoptions页也会指出CORRECT_ALL尝试更正一行中所有参数的拼写。而且,至少从2008年以来,CORRECT和的人手条目都CORRECT_ALL没有改变。您能解释一下导致您陈述的原因吗?
mpy

我想补充一下:加载顺序很重要!确保在采购oh-my-zsh之后添加unsetopt ...浪费了我很多时间。
OMA

22

我想我找到了一个更好的答案。

我不确定版本和什么,但似乎correct_all应该纠正命令参数,而correct只纠正命令,因此消除了这种烦人的行为。

这就是我的配置文件中的内容

unsetopt correct_all  
setopt correct

这是实际答案。correct-all在我可以找到的任何文档中,或者在Real Life中,似乎都不是真正的选择。是correct_all。谢谢!
Jamey


你是我的英雄!
马丁K,

如果使用oh-my-zsh,请确保在这两行之后放置两行,source $ZSH/oh-my-zsh.sh否则它将不起作用。看来oh-my-zsh将重设选项correct_all。
马特

0

使用rspecvia 时出现问题zeus,我想保留自动更正的设置,因为它们似乎适用于除以外的 所有其他功能rspec,因此我从未尝试过上述任何其他建议。

我要做的是nocorrect宙斯本身:

别名zeus ='nocorrect zeus'


0

我可以使用禁用自动更正

ENABLE_CORRECTION="false"

我正在使用zsh版本5.7.1


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.