値に基づいてファジー検索を実行し、提案を返すgd
zsh 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