Answers:
您可以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模式的更多信息。
zshzle
。这是非常有用的信息。
这是一个古老的问题,但是唯一的(并被接受的)答案基本上告诉一个人如何将“类似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
"^P" history-beginning-search-backward
,并"^N" history-beginning-search-forward
为VIM,如自动完成(你开始打字,然后按ctrl+p
或ctrl+n
)。
?
带来了bck-i-search
,这正是我想要的。谢谢。
/
或“?” 不:coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
^R
键盘绑定过载。history-search-backward
和history-incremental-search-backward
都支持的唯一“类似于regex的”字符是^
,用于将搜索字符串锚定到行的开头。history-incremental-search-backward
顾名思义,它的真正功能是进行增量搜索。我可以想象,vicmd
由于这个原因,有人可能希望将其绑定到键盘映射中。
history-incremental-pattern-search-backward
不是history-incremental-search-backward
。history-incremental-pattern-search-backwards
也许是一个小部件..但是我认为它默认安装在zsh中。它不支持您正确指出的glob
模式regex
:zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators。的确有在后一个错误..