自动完成 diff 命令在 zsh / oh-my-zsh 中不起作用

自动完成 diff 命令在 zsh / oh-my-zsh 中不起作用

在 MacOS 上,我使用的是 oh-my-zsh,据我所知,没有进行任何自定义。

自动补全大部分工作得很好,我对此非常满意。但由于某种原因,diff命令有所不同。

➜  ls file<TAB>
file1  file2
➜  diff file1 file<TAB>  # Rings bell and no completion
➜  diff file1 <TAB>  # Gives me a "-" completion
➜  diff file1 -<TAB>
-b  -- skip trailing white spaces
-c  -- output a context diff
-e  -- output an ed script
-f  -- output a reversed ed script
-r  -- recursively compare subdirectories

因此,diff似乎没有意识到您可以提供第二个参数作为 diff 的第二个文件,并且它似乎只接受命令选项作为第二件事。

任何想法发生了什么或如何解决这个问题?

一般来说,是否有一种简单的方法可以配置为完全禁用特定命令的智能完成?我compdef _files diff这样做了,并且在该 shell 中有效,但在后续的新 shell 中无效。

答案1

这是由于 oh my zsh 中的一个错误造成的,该错误已修复了一点2023 年 1 月 25 日但又坏了2023 年 3 月 3 日

我已添加评论原始问题突出显示此回归并尝试自己在本地修复它,但遇到了问题。如果我的 zsh 团队修复了这个错误,我会更新这个答案。

答案2

问题是因为oh-my-zsh定义了alias diff='diff --color',但diffmacOS 的命令不支持这样的标志。你可以通过这样做看到这一点/usr/bin/diff --help

因此,颜色标志实际上可以充当第一个文件名参数。

解决方法是安装diff支持该标志的GNU color。与酿造:

brew install diffutils

相关内容