如何在 zsh 中启用反向搜索?

Ali*_*Ali 63 command-history zsh vi

我最近切换到 zsh(终于)并且很喜欢它!到目前为止,我缺少的一件事是Ctrl+R进行增量历史搜索。
我已正确设置历史记录

HISTSIZE=10000
SAVEHIST=10000
HISTFILE=~/.zsh_history
Run Code Online (Sandbox Code Playgroud)

我使用了vi键绑定

bindkey -v
Run Code Online (Sandbox Code Playgroud)

但是Ctrl+R不起作用。它删除当前行上方的行,这也不是它在 vim 中应该具有的行为。

有什么建议?

Chr*_*own 99

如果我没记错的话,您需要明确设置它,即使使用bindkey -v. 使用这样的东西:

bindkey -v
bindkey '^R' history-incremental-search-backward
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了一个错误。用双引号包裹 ^R 做到了。`绑定键“^ R”历史增量模式搜索向后` (5认同)
  • 也许`history-incremental-pattern-search-backward` 是在该上下文中使用的替代操作。 (4认同)
  • @Ali,使用 *-pattern-* 版本,您可以使用搜索模式(哪种样式,即通配符或正则表达式(?)取决于您的 zsh 配置的其他部分)-例如您可以使用搜索模式`fo *bar` 和 `grep` 匹配 'fobar'、'foobar'、'fooobar' 等。 (3认同)
  • @maxschlepzig 抱歉,两者有什么区别? (2认同)
  • `bindkey -v` 必须在 `history-incremental-search-backward` 之前 (2认同)

小智 9

bindkey -e也可以工作并使 zsh 的行为更像 bash。它会恢复您可能使用过的其他内容,例如 ctrl-A(行首)、ctrl-K(删除光标右侧的所有内容)。

  • 只需添加一条注释来解释这设置了所谓的“emacs 模式”,它甚至为像我这样不熟悉 emacs 的人提供了很多这些设置。 (3认同)

Moh*_*ish 8

OMZ 框架有预打包的zsh-history-substring-search插件。只需启用并使用即可。

插件=(git历史记录-子字符串-搜索)