zsh 自动完成差异:不提供重复完成同一文件

zsh 自动完成差异:不提供重复完成同一文件

我有两个文件:

$ ls
file1  file2

我想将它们与 进行比较diff。当我输入“diff file1 f”时,补全系统会向我提供这两个文件:

diff file1 file<TAB>
file1  file2

是否可以告诉完成系统,如果file1已使用,则不应再次提供完成?

也许有一些简单的方法可以使用zstyle completion语法来做到这一点?

zstyle ':completion:*'

答案1

打开ignore-line风格:

zstyle ':completion:*:complete:diff:argument-*:*' ignore-line true

或者,更改完成函数:

_diff () {
    local ignore
    ignore=($words[2,$#words])
        _diff_options "$words[1]" ':original file:_files -F ignore' ':new file:_files -F ignore'  
}

(这种方法是以下内容的简化_rm做。)

这两种方法都处理常见情况,即提供完成但不提供。这两种方法都不能处理所有边缘情况,例如即使与.第一种方法的缺点是不提供完成名为 的文件,因为该样式会忽略包括命令名称在内的每个单词。diff bar baTabbazbardiff bar ./baTab./barbardiffignore-line

相关内容