在 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'
,但diff
macOS 的命令不支持这样的标志。你可以通过这样做看到这一点/usr/bin/diff --help
。
因此,颜色标志实际上可以充当第一个文件名参数。
解决方法是安装diff
支持该标志的GNU color
。与酿造:
brew install diffutils