zshファイルタブの完成:空白以外の文字が前にあるパス

zshファイルタブの完成:空白以外の文字が前にあるパス

私はこれを検索する方法を見つけることができず、これがすでにインターネット上で説明されていることを確認できません。

コマンドラインに次のものがあり、<TAB>最後を押してファイルの完成を開始したいと思います。

   mycmd process file=data/old/1/

Bashを使用すると、このタブにはフォルダ内のファイルが表示されますが、1/Zshではシンボルの後にスペースを入れない限りこれは発生しません=。このためにZshを再設定できますか?

答え1

setopt magic_equal_subst

これは、既存のスタイルと新しいスタイルの終了の両方に適用されますcompinit

後でファイル名の完成が=あいまいで文書化されていない副作用です。magic_equal_substオプション。このオプションのロギング効果は次のとおりです。ファイル名拡張子後ろに=

ほとんどの場合、このオプションの効果を確認すると、これは望ましい効果です。

somecommand --option=~/file

somecommandというディレクトリのパスではなく、ホームディレクトリの下のパスをに渡します~。ただし、これはファイル名拡張子を引き起こす引数のために望ましくない効果がよく発生します==

somecommand foo==bar

foo=/bin/barコマンドがatにある場合は通過します。コマンドを文字通り渡すには、少なくとも等号で引用する必要があります。bar$PATH/bin/bar==

somecommand foo=\=bar
somecommand foo\==bar

新しい完成システムでは、これは内部的に処理されます。_default=有効にせずにファイル名を完成させるには、同じ効果を得るためにオーバーライドまたはmagic_equal_substラップする必要があります。_defaultたとえば、

autoload +X -U _default
functions[_default]="setopt local_options magic_equal_subst; $functions[_default]"

関連情報