Zsh尝试将命令更正为文件

Zsh尝试将命令更正为文件,zsh,sudo,Zsh,Sudo,Zsh有一个功能,可以提示对当前目录中的文件进行更正。例如,当我想说cdbaz时,如果我说cdbar,那么zsh会说:zsh:correct'bar'to'baz'[nyae]? 通常情况下,这很好。然而,sudo似乎把事情搞砸了。具体来说,假设我想用git对apache2目录进行版本控制。我会键入类似于sudogitadd的内容。这是要运行的正确命令。但是,zsh会用zsh:correct'git'to.git'[nyae]?提示我,好像它不知道git是一个命令,所以它认为我试图引用.git文

Zsh有一个功能,可以提示对当前目录中的文件进行更正。例如,当我想说
cdbaz
时,如果我说
cdbar
,那么zsh会说:
zsh:correct'bar'to'baz'[nyae]?

通常情况下,这很好。然而,sudo似乎把事情搞砸了。具体来说,假设我想用git对apache2目录进行版本控制。我会键入类似于
sudogitadd的内容。
这是要运行的正确命令。但是,zsh会用
zsh:correct'git'to.git'[nyae]?
提示我,好像它不知道git是一个命令,所以它认为我试图引用.git文件夹

为什么会这样?在这种情况下,我如何让它停止提示我

谢谢


<>编辑:默认情况下,ZSH将考虑命令的所有参数为文件或目录。但是,我知道有一些功能可以扩展它。例如,如果我键入
git st
tab,那么zsh将在stash、status或stripspace中完成它(其中每个都有文档)。理想情况下,我希望zsh能够继续提供类似于sudo的提示(因此,我宁愿不做任何更正)。如何在zsh中自定义该功能?

在命令本身之前使用
nocorrect
,或者定义别名

alias sudo="nocorrect sudo"

奇怪的是,你只注意到了sudo。我过去常常在
emerge
/
cave
/
paludis
eix
(它们接受程序名作为参数;程序名通常与它们的配置目录名相同),有时
grep
,我自己在后台启动应用程序的脚本等等。结果,我禁用了除命令名correction以外的所有更正:
setopt nocorrectall
。这里的问题是
sudo
(和
emerge
/…)是一个程序,
git
是它的参数。Zsh更正在程序参数中只需要文件(或目录)名,因此任何接受非文件名的命令都会遇到此类问题。你是对的,因为
sudo
不是一个shell内置,zsh不知道
git
是一个命令。谢谢你提供的信息!我在我的问题中添加了更多的描述。没有“默认情况下考虑所有参数”这样的事情。Zsh完成和Zsh校正是不同的机制,后者是不可配置的。我还希望看到它们合并(即使用完成的变体进行更正),或者至少更正可以单独配置(尽管这需要完成脚本作者编写更多的代码),但这一想法将在zsh邮件列表中讨论。在完成之前,我将使用
setopt nocorrectall
进行
setopt correct