zshにファイル名の途中で操作を実行させるにはどうすればよいですか?

zshにファイル名の途中で操作を実行させるにはどうすればよいですか?

これは効果があります

通常、zshタップの完成はうまく機能します。

$ touch foo-1-bar foo-2-bar
$ touch f<Tab>
$ touch foo--bar
            ^ cursor here

もう一度押すと、Tabファイルを選択できるメニューが表示されます。

$ touch foo--bar
foo-1-bar  foo-2-bar

これはない

しかし、これは始まりと終わりが一致する文字列には機能しないようです。たとえば、

touch foo-bar foo-foo-bar
touch f<Tab>
touch foo-bar
         ^ cursor here. <tab> again.
touch foo-bar
              ^ cursor here.

メニューは表示されず、選択する機会もありませんfoo-foo-bar。これは予想される動作ですか、それともバグですか?後者の場合でもメニューが表示されるようにする設定はありますか?

私はそれを使用していますoh-my-zsh。完了関連行をすべて削除しようとしましたが、~/.zshrc違いはありませんでした。

答え1

コメントに基づいて無効にしようとしましたが、oh-my-zsh問題は解決しました。その後、oh-my-zshソースコードに移動し、オプションでモジュールを無効にしました。

私は以前これを持っていましたが、CASE_SENSITIVE="true"この行をコメントアウトすると問題が解決しました。明らかにこれ既知のエラー

~/.zshrcこの問題を解決するには、ソースの後に次の行を追加するだけですoh-my-zsh

zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*'

答え2

個人的には私はこの解決策を好みます。http://zsh.sourceforge.net/FAQ/zshfaq04.html#l50、これはtcshの完成と同様に機能し、カーソルの前の単語だけを完成します。

ただ使用

    bindkey '\CI' expand-or-complete-prefix

変える

    bindkey '\CI' expand-or-complete

(基本的に)。

答え3

別のオプションは、1ページに記載されているようにCOMPLETE_IN_WORDを設定することです。http://zsh.sourceforge.net/FAQ/zshfaq04.html#l50

setopt complete_in_word

これにより、カーソル位置の単語が埋められ、カーソルポイントの後ろのすべての文字が塗りつぶされた内容に置き換えられます。

関連情報