두 개의 파일이 있습니다.
$ 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