zsh:按下 ^R 时用现有行内容填充搜索输入?

zsh:按下 ^R 时用现有行内容填充搜索输入?

给定 .zshrc 配置:

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

当我foo<^R>bar在空提示符下键入时,它会搜索最近匹配的命令bar

如何让 ^R 使用现有的提示输入?即与我想要匹配的键序列foobar

答案1

如果您绑定^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搜索将基于您迄今为止找到的行,而不是重复当前搜索。)

相关内容