Zsh想要自动更正命令,命令前带有_


70

我最近刚开始使用Zsh在shell提示中提供一些集成支持,以获取我的Git状态等信息。

当我输入:

 ruby -v

为了确认我正在运行的ruby版本,Zsh询问我是否要将命令更改为_ruby。在提示符下说“否”并且命令按预期完成后,我在确认命令正确后继续在提示符下出现问题。

我假设有一个完成文件或类似的东西。

谢谢

更新:

Shell不再尝试完成_ruby,它在关闭Shell几次后停止响应。

我试图清理文件多次,但是有一个“ opts”变量,长度为50行或更多行,并且所有行都一起运行,有些行超过150个字符。如果您仍然想查看附件,也许可以通过电子邮件将附件发送给您。诚挚的道歉。


我没有看到这种行为。什么版本的zsh?你有什么~/.zshrc?如果您尝试运行简单的ruby CLI脚本(例如ruby -e 'print "hi\n"'),是否这样做?发布您的/usr/share/zsh/functions/Completion/Unix/_ruby文件,我们可以根据已知的良好版本进行检查。
丹尼斯·威廉姆森

我问的其他问题呢?我不明白-您还有问题吗?如果您希望某人确定并查看您的跟进,如果信息本身太长而无法放入注释中,请在@username上发表评论,例如“查看已编辑的问题”。这将点亮用户的通知图标(页面顶部的小信封)。
丹尼斯·威廉姆森

@丹尼斯·威廉姆森事实证明,吉尔斯的答案是正确的。我相信它会在重新启动外壳程序或注销后自行纠正。我不确定是否注销。“我不明白-你还有问题吗?” 正如我在帖子中所说的那样,在我选择不让zsh将其更改为_ruby之后,ruby命令将运行。是的,一切正常。感谢您的单挑
Joe Ryan 2010年

_ruby在工作目录中是否有文件或文件夹名称?我有一个名为git的git存储库,stats每次输入时git status,zsh都希望将其“更正”为git stats。对我来说,是oh-my-zsh激活了该correct选项,我开始讨厌这个东西。
Olivier'Ölbaum'Scherler 2011年

Answers:


113

这是命令自动更正,由correct选项激活。它与完成无关。您看到的_ruby是因为zsh认为没有ruby命令,它提供的_ruby是最接近的现有匹配项。

如果您刚刚安装了ruby,则可能zsh早些时候已经记住了可用命令的列表,并且不会总是尝试查看命令是否出现在两者之间。在这种情况下,请运行hash -rf。将来的zsh会话不会出现此问题,因为ruby启动时该命令已经存在。

有时,当您更改时PATH,zsh会忘记一些哈希命令。该选项hash_listall对此有所帮助。如上所述,如果您可以强制使用zsh刷新其命令缓存hash -rf


这绝对是正在发生的事情。似乎经过一会儿就纠正了。它可能已重新启动外壳程序或已注销。我不记得是否注销了,所以我不想说仅通过重新启动外壳程序即可纠正它。唯一令我困惑的是选择让zsh对其进行更改时命令如何成功完成。我猜想就像您说的那样,与shell没有“知道”当时可用的ruby命令有关。感谢您的回答
乔·瑞恩

附带说明,我正在使用zsh 4.3.12(i386-apple-darwin11.0.0),hash_listall但未找到。但是hash -rf用zsh解决了我的问题,一直想自动更正我最近安装的内容。
递归

8
我的git-alias遇到了这个问题git lg,zsh认为应该这样git log。我之所以称之为它lg,是因为它与相似log,因为其功能相似!如何解决这个问题?我真的不想养成按两次Enter键的习惯。
史蒂文·卢

22

您可以使用别名:

alias ruby='nocorrect ruby'

当zsh不断询问我.meteor键入的内容时,我就是这样做的,meteor因为自动校正有时仍然有用。


1
轻松找到最有用的工具
netpoetica 2013年

13

我发现自动更正功能有时会很烦人。所以我在〜/ .zshrc中

DISABLE_CORRECTION="true"

1
更好的是,创建别名以打开和关闭自动更正,因为在大多数情况下,您都希望使用它,尤其是在使用大量插件的情况下。
戴夫·牛顿

2

在更新之前的某个时间,我启用了我不需要的命令自动更正。如果您遇到相同的情况并且想要还原它,则在〜/ .zshrc文件中将其还原:
# Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="false"

或按以下方式评论:
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"


0

请注意,在我的zsh(macOS上的5.7.1版)上,DISABLE_CORRECTION不起作用。

我在.zshrc文件中看到了以下两行,然后将其注释掉

setopt CORRECT
setopt CORRECT_ALL

对我来说就做到了。


0

即使未安装命令,我也遇到同样的问题。

我可以使用CORRECT_IGNORE我的变量来解决它.zshrc

# OPTs to enable
setopt HASH_LIST_ALL
setopt CORRECT
# Zsh variable to determine what to ignore,
# in this case everything starting with _ or . 
CORRECT_IGNORE="[_|.]*"

希望对您或任何遇到此问题的人有帮助

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.