Han*_*Gay 64 command-history zsh vi-mode
我vim基本上满足了我所有的编辑需求,所以我决定再次为我的 shell 尝试 vi-mode(目前在 OS X 上使用 ZSH w/ oh-my-zsh),但我发现自己尝试(但失败)经常使用Ctrl-R。什么是等效的键绑定?供将来参考,我如何自己解决这个问题?我很确定我可以bind -P在 bash 中使用。
mrb*_*mrb 71
您可以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
Run Code Online (Sandbox Code Playgroud)
在 emacs 模式下,你想要的绑定是history-incremental-search-backward,但在 vi 模式下默认不绑定。要自己绑定 Ctrl-R,您可以运行此命令,或将其添加到您的~/.zshrc:
bindkey "^R" history-incremental-search-backward
Run Code Online (Sandbox Code Playgroud)
该zshzle手册页(man zshzle)对的zsh的行编辑器,bindkey,和emacs / VI模式的更多信息。
wjv*_*wjv 45
这是一个古老的问题,但唯一(并被接受)的答案基本上是告诉人们如何将“类 emacs”移植history-incremental-search-backward到 vi 模式。虽然这是完全可行的并且可能是适合您的正确解决方案,但有点奇怪的是没有人提到搜索历史的“vi 方式”。
zsh 中的 vi 模式支持使用标准 vi/vim 键搜索历史记录: /和?,两者都在命令模式下可用。(点击<Esc>从插入模式切换到命令模式,就像在 vi 或 vim 中一样。)
但是,它们的含义是相反的:由于您通常希望反向搜索 shell 的历史记录,因此/进行反向搜索而?进行正向搜索。
显示第一个命中后,您可以(就像在 vi/vim 中一样)使用n继续在同一方向查找更多命中,或N反转搜索方向。
键vicmd映射中的相关默认键绑定是:
"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search
Run Code Online (Sandbox Code Playgroud)