Oh-my-zshのrcファイルでzshを使用していますが、特に煩わしい動作がいくつかあります。デフォルトでは、oh-my-zshはオートコンプリート時に大文字と小文字を区別しない一致を返すように構成されています。この振る舞いは良いこともあるが、実際にはひどい場合もある。大文字と小文字を区別する一致がない場合に大文字と小文字を区別しない一致のみを使用するようにzshを構成する方法はありますか?
たとえば、このケースでは大文字と小文字を区別するマッチングを使用します。
> ls
LICENSE.txt lib/
> emacs l <-- should autocomplete to lib/
この場合、大文字と小文字を区別しないオートコンプリートが発生します。
> ls
README lib/
> emacs r <-- should autocomplete to README
ありがとう!
〜/ .zshrcの次の行のコメントを外してください:
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
それは私のために働いた
次の行を含むファイル_~/.oh-my-zsh/custom/better-completion.zsh
_(oh-my-zshのデフォルトパスを使用していると想定)を作成します。
_zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
_
説明:
一般にzsh補完での一致のルールは_matcher-list
_スタイルで定義されます。 oh-my-zshの場合、これは_~/.oh-my-zsh/lib/completion.zsh
_で定義されます(大文字と小文字を区別する場合は1回、大文字と小文字を区別しない場合は1回)。そこで変更することもできますが、oh-my-zshを更新した場合はおそらく失われます。 _~/.oh-my-zsh/custom
_は特にカスタマイズを目的としており、拡張機能_.zsh
_が付いたファイルは、構成の最後に_.oh-my-zsh/oh-my-zsh.sh
_によってそこからロードされます。
oh-my-zshの_matcher-list
_のデフォルト(大文字と小文字を区別しない)設定は次のとおりです。
_zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
_
最初のものは、大文字と小文字を入れ替えて処理するように指示しています。これは最初のルールなので、すべての試合で常に使用されます。
必要な唯一の変更は、単純な補完のために_''
_を前に付けることです(これは_matcher-list
_のzshcompsys(1)
の最初の例です)
_zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
_
これは、大文字と小文字を区別しないか他の一致を試みる前に、最初に現在のWordをその記述どおりに完成しようとします。
完了するには:
.
_、__
_または_-
_の前に部分的に補完できます。 _f.b
_-> _foo.bar
_。bar
-> foobar
)