是否可以使 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
对于每个受影响的命令,我必须求助于拐杖:设置alias man='nocorrect man'
等,但显然这不是最好的解决方案。我也不喜欢CORRECT
并且更喜欢拐杖加CORRECT_ALL
而不是仅仅CORRECT
。
Zsh 是zsh 4.3.17 (x86_64-unknown-linux-gnu)
Debian sid。
更新: 这是我的.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 软件包可用以及是否正确加载默认配置。您不必为标准命令设置一堆手动覆盖,例如您在问题中列出的命令。