web-dev-qa-db-ja.com

Zshタブ補完が部分的なパスで期待どおりに機能しない

zshのファイルとディレクトリの大文字と小文字を区別しないファジー補完が必要です。マニュアルを数時間読んだ後、これは私が思いついたものです:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

さらに、可能な補完を表示するためにTABを1回押し、補完が1つしかない場合は入力した内容のみを変更します。次にTABをもう一度押すと、「メニュー完了」モードになります。マニュアルに基づいて、私はこれを思いつきました:

zstyle ':completion:*' menu select

これで、1つの状況を除いて、すべてが正常に機能します。ホームディレクトリにDesktop.rstudio-desktopの2つのフォルダーがあります。私はsetopt globdotsを持っているので、次のように入力すると思います。

$ cd ~/dktop<TAB>

コマンドを入力したままにし、補完候補Desktopおよび.rstudio-desktopとして表示します。代わりに、それはremovesdktopとなり、次のようになります。

$ cd ~/

関連するすべてのマニュアル、ガイド、Stack Exchangeの質問、およびその他のさまざまなソースを確認しました。しかし、私が何をしても、私はこの仕事をすることができません。

しかし、興味深いことに、私がinで、次のように入力すると、すべてが期待どおりに機能します。

$ cd dktop<TAB>

つまり、それはパスの先頭以外のセグメントに関する問題のみです(そして、これは、使用されているC-x hタグではなくdirectoriesタグに対応していることをlocal-directoriesで確認できます)。

簡単に再現できるように、 here は上記の状況と動作を再現する~/.zshrcです(Homebrewのzshを使用して新しいEl Capitan仮想マシンでテスト済み)。

17

可能な解決策の1つは、次のことです。

bindkey "^I" expand-Word

これにより、タブが展開されます~/を絶対パスに。

1