setopt multios
以下を行うには、zsh multios set()を使用してください。
< in1 < in2 > out
そして:
< in > out1 > out2
これはとても便利です。
私はこの機能を中括弧拡張()とsetopt braceexpand
組み合わせたいと思います。だから、次のように言います。
<in{1,2}^I
(^I
テキストタブで完成システムを呼び出します。)次に拡張したいと思います。
<in1 <in2
しかし、私が得るものは次のとおりです。
<in1 in2
この動作を修正する簡単な方法はありますか?
答え1
必要な動作は、既存の完了設定(compinstall
数回のパスでゆっくりと生成されます)と自動的に機能するため、担当する特定の設定の範囲を絞り込むのに時間がかかりました。
コア機能は「完成者」によって提供されます_expand
。次のように含めることができます。
zstyle ':completion:*' completer _expand
_completer
完成ツールも使用している場合は、_expand
まずそれらをリストする必要があります。たとえば、これは私の実際の完成者設定です:
zstyle ':completion:*' completer _expand _complete _ignored _match _approximate _prefix
次に、支柱の拡張を有効にするには有効にする必要がありますsubstitute
。この機能はデフォルトで有効になっていますが、次のように明示的に設定できます。
zstyle ':completion:*' substitute 1
この機能をどこでも有効にしたくない場合は、次のように完全に無効にして有効にするだけです_expand
。
zstyle ':completion:*' substitute 0
zstyle ':completion:*:expand:*' substitute 1
私はこれをテストしました扱いにくいバージョン 4.3.11 および 5.0.2: 新しいシェルを起動し、以下を含むzsh -df
ファイルをインポートします。
zstyle ':completion:*' completer _expand
zstyle ':completion:*' substitute 0
zstyle ':completion:*:expand:*' substitute 1
autoload -Uz compinit
compinit
(オプションmultios
とno_ingore_brace
(エイリアスbrace_expand
)はデフォルト値なので、明示的に変更する必要はありません。)
cat <in{1,2}
次に Tab キーを入力して押しました。 Tabを数回押す必要があります。各拡張バリアントに対して一度、「すべての拡張機能」項目に移動するには、もう一度タップします(上記の例では合計3回押します)。この特定のアイテムを表示する方法が見つかりませんでした。最初。
答え2
私が使用している全体の設定は次のとおりです。
zstyle ':completion:*' completer _complete _list _expand _oldlist _ignored _match _correct _approximate _prefix
代替設定はデフォルト設定の1です。
Chrisの答えと正しい方向についてのアドバイスを見て、これが私の構成に関連していることに気づきました。
フィニッシャーの順序と代替設定を調べ始めましたが、どちらも動作を変えませんでした。私の設定と比較するために、Chrisが提供した最小設定ファイルを使用して問題を私のバインドキーファイルに絞り込み、そこで何らかの理由で必要な拡張が失敗するという副作用がbindkey -v
あります。^I
expand-or-complete
viins
引き続きキーマッピングを使用したいので、vicmd
私の解決策はタブの動作を次のように変更することでしたcomplete-word
。
bindkey -M viins "\CI" complete-word
bindkey -M vicmd "\CI" complete-word
長すぎます。
viins
または、キーマップを使用している場合は、次のようにviicmd
変更する必要があります。^I
complete-word
bindkey -M viins "\CI" complete-word
bindkey -M vicmd "\CI" complete-word