web-dev-qa-db-ja.com

zsh:^ Rが押されたときに、検索入力に既存の行の内容を入力しますか?

与えられた.zshrc構成:

bindkey -v
bindkey "^R" history-incremental-pattern-search-backward

空のプロンプトでfoo<^R>barと入力すると、barに一致する最新のコマンドが検索されます。

^ Rに既存のプロンプト入力を使用させるにはどうすればよいですか?つまりそのキーシーケンスでfoobarと一致させたい。

2
Plato

^Rhistory-beginning-search-backwardにバインドすると、それに近づきますが、それはパターン検索ではありません。

^Rを、行の現在の内容を初期検索パターンとして追加する関数にバインドできます。

history-incremental-pattern-search-backward-from-line () {
  zle history-incremental-pattern-search-backward $BUFFER
}
zle -N history-incremental-pattern-search-backward-from-line
bindkey -M viins "^R" history-incremental-pattern-search-backward-from-line
bindkey -M vicmd "^R" history-incremental-pattern-search-backward-from-line
bindkey -M isearch "^R" history-incremental-pattern-search-backward

isearchマップへのバインドが必要です。そうしないと、^Rが繰り返されると、現在の検索を繰り返すのではなく、これまでに見つけた行に基づいて検索が行われるためです。)