如何在ZSH的vi模式下执行反向历史记录搜索?


47

vim基本上满足了所有编辑需要,因此我决定再次尝试对外壳使用vi模式(当前在OS X上为ZSH w / oh-my-zsh),但是我发现自己一直在尝试(并且失败)Ctrl-R不断使用。什么是等效的键绑定?为了将来参考,我如何自己解决这个问题?我很确定我可以bind -P在bash中使用。


2
根据“ man zshzle”的说法,默认情况下,Vi历史记录模式(vicmd,viins)中未绑定历史增量搜索。
paul 2012年

Answers:


56

您可以bindkey不带任何参数运行以获取现有绑定的列表,例如:

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

在emacs模式下,所需的绑定是history-incremental-search-backward,但在vi模式下默认情况下未绑定。要自己绑定Ctrl-R,可以运行此命令,或将其添加到您的~/.zshrc

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

zshzle手册页(man zshzle)对的zsh的行编辑器,bindkey,和emacs / VI模式的更多信息。


3
谢谢,特别感谢zshzle。这是非常有用的信息。
汉克·盖伊

我爱你。说真的 升级到OSX El Capitan后,反向搜索消失了,我比日常工作中的其他一切都错过了它。
基督教徒

24

这是一个古老的问题,但是唯一的(并被接受的)答案基本上告诉一个人如何将“类似emacs”的内容移植history-incremental-search-backward到vi模式。尽管这是完全可行的,并且可能是适合您的解决方案,但是没有人提到搜索历史的“ vi方法”,这有点奇怪。

zsh中的vi模式支持使用标准vi / vim键(/和)搜索历史记录 ?,这两个命令均在命令模式下可用。(单击<Esc>即可从插入模式切换到命令模式,就像在vi或vim中一样。)

但是,它们的含义是相反的:由于您通常想反向搜索shell的历史记录,因此请/进行反向搜索,而?进行正向搜索。

显示第一个n匹配项后,您可以(就像在vi / vim中一样)使用继续沿相同方向查找更多匹配项,或N反转搜索方向。

vicmd键盘映射中的相关默认键盘绑定为:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

2
这也很好用"^P" history-beginning-search-backward,并"^N" history-beginning-search-forward为VIM,如自动完成(你开始打字,然后按ctrl+pctrl+n)。
cprn

对我来说,?带来了bck-i-search,这正是我想要的。谢谢。
geowa4,2013年

@wjv history-incremental-search-backward的优点是它支持glob模式。默认值/或“?” 不:coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
alpha_989 '18

@ alpha_989您引用的博客文章不正确。可能是作者安装了一些zsh“框架”,使^R键盘绑定过载。history-search-backwardhistory-incremental-search-backward都支持的唯一“类似于regex的”字符是^,用于将搜索字符串锚定到行的开头。history-incremental-search-backward顾名思义,它的真正功能是进行增量搜索。我可以想象,vicmd由于这个原因,有人可能希望将其绑定到键盘映射中。
wjv

@wjv,您是对的。我应该写的history-incremental-pattern-search-backward不是history-incremental-search-backwardhistory-incremental-pattern-search-backwards也许是一个小部件..但是我认为它默认安装在zsh中。它不支持您正确指出的glob模式regexzsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators。的确有在后一个错误..
alpha_989
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.