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


17

のファイルとディレクトリの大文字と小文字を区別しないファジー補完が必要です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\_}'

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

zstyle ':completion:*' menu select

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

$ cd ~/dktop<TAB>

コマンドを入力したままにして、完了候補Desktopおよびとして表示し.rstudio-desktopます。代わりに、を削除 dktopして、次のものを残します:

$ cd ~/

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

興味深いことに、しかし、私は場合ホームディレクトリと予想されるように、次のすべての作品を入力します。

$ cd dktop<TAB>

つまり、パスの先頭以外のセグメントの問題だけです(これは、使用されC-x hているdirectoriesタグではなくタグに対応していることがわかりますlocal-directories)。

簡単に再現するために、ここにある~/.zshrc(と新鮮なエルキャピタンの仮想マシン上でテストされ、上記の状況や行動再現することzsh自作のを)。


再現できません。zsh 5.3.1Arch Linuxcd ~/dktop<tab>収量cd ~/Desktop
PythonNut

@PythonNut zsh 5.3.1OS Xでは、問題は再現します。オペレーティングシステムに違いがあるのは興味深いことです。
ラドンロズバラ

1
@PythonNut実際には、Linuxでは大文字と小文字が区別され、macOSでは大文字と小文字が区別されないためだと思います。
ラドンロズバラ

すべてのMac / macOSが大文字と小文字を区別しないわけではないのと同様に、ディスクが大文字と小文字を区別しないでフォーマットされているかどうかに依存します。
コンキ

回答:


1

可能な解決策の1つは次のとおりです。

bindkey "^I" expand-word

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


たぶん何かが足りないかもしれませんが、これがどのようにファジータブ補完に関係しているのか、または上記で概説した問題の解決にどのように関係するのかわかりません。あなたが提案するようにするとcd /Users/raxod502/dktop、TABを押すとが表示され、補完は無効になります。
ラドンロズバラ

@RadonRosborough ~/絶対パスに拡張することで、ファジー補完が機能し始めることが期待されていました。問題は1回評価することですが、実際には2回評価して動作する必要があるというケースのように思えたので、代わりに絶対パス~/があると、1回の評価だけが必要になります。しかし、残念ながら、bindkeyが古いバインディングを置き換えることを忘れてしまいました。2つの関数を1つのキーにbindkeyすることさえ可能かどうかを示すものは見つかりません。私のバインドキーがなければ、絶対パスを指定した場合、完了は意図したとおりに機能しますか?
便秘

いいえ。入力パスがである~/dktop/Users/raxod502/dktop;であるかに違いはありません。結果は同じです。つまり、dktopTABを押すと削除されます。
ラドンロズバラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.