Zsh — 更智能的自动更正

Zsh — 更智能的自动更正

是否可以使 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-Csshsudo

对于每个受影响的命令,我必须求助于拐杖:设置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 软件包可用以及是否正确加载默认配置。您不必为标准命令设置一堆手动覆盖,例如您在问题中列出的命令。

相关内容