プレフィックスと一致しないzsh補完で自動補完提案を提供する方法

プレフィックスと一致しないzsh補完で自動補完提案を提供する方法

値に基づいてファジー検索を実行し、提案を返すgdzsh autocompleteというコマンドがあります。$words[CURRENT]検索は正常に機能しますが、入力したテキストが提案されたプレフィックスではないため、zshは候補を表示しません。

例えば

% gd hw

生成することができるoh hello there, world

hwただし、zshは提案の冒頭に見つからないため、これを表示しません。

選択時に現在の単語を置き換えるようにzshに提案を提供させることはできますか?

_gd以下は、myというファイルにある完成スクリプトの単純化されたバージョンですfpath

#compdef gd

_gd() {
  local -a list

  clue="$words[CURRENT]"

      pattern=""
      for i in $(seq $#clue)
      do
        pattern="$pattern.*${clue[i]}"
      done
      while read dir
      do
        list=( $list $dir )
      done <<<$(grep "$pattern" ~/.recent-dirs)

  _describe gd list
}

ベストアンサー1

関数を削除_gdし、ファイルに以下を追加します.zshrc

autoload -Uz compinit
compinit
zstyle ':completion:*' matcher-list 'r:|?=**'

これは、入力するコンテンツの間とその周辺に追加のコンテンツを許可するようにコンプリートコードに指示します。これにより、Zshは完了をぼかすことができます。何もない

  • r:X|Y=Zパターンに一致する重複しないすべての部分文字列を検索し、XY一致するものにします。X 返品Z一致が完了したら、パターンに一致するものがあることを確認してください。
  • ?任意の文字と一致します。
  • 等しいか等しいX場合は、任意の数の連続した文字と一致します。Y*
  • Z等しい場合は、*任意の数の連続した文字と一致します。とは別に何でも一致しますY
  • Z等しい場合は、**任意の数の連続した文字と一致します。
  • では空の文字列と同じですr:|?=**X
  • デフォルトでは、Zshはすでに入力の末尾にワイルドカードを追加して、完全なファジーマッチサイクルを完了します。

ここでドキュメントを見つけることができます:http://zsh.sourceforge.net/Doc/Release/Completion-Widgets.html#Completion-Matching-Control

おすすめ記事