zshオートコンプリートの違い:同じファイルの反復補完を提供しません。

zshオートコンプリートの違い:同じファイルの反復補完を提供しません。

2つのファイルがあります。

$ ls
file1  file2

私はそれらをと比較したいと思いますdiff。 「diff file1 f」と入力すると、完成システムは次の2つのファイルを提供します。

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

おすすめ記事