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

관련 정보