我有两个文件:
$ 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 baTab
baz
bar
diff bar ./baTab
./bar
bar
diff
ignore-line