我最近在 zsh 中切换到 vi 模式,并且 emacs 模式中有一个功能,我无法找到如何在 vi 模式下执行此功能。该功能是按行浏览历史记录,从我已经输入的内容开始。例如,如果我键入vi
并按↑或↓然后我浏览以 开头的最近命令vi
。甚至可以使用 vi 模式吗?
答案1
emacs 模式和vi模式只是按键绑定的不同预设。任何小部件都可以在任何模式下绑定。
这里讨论的小部件是history-beginning-search-backward
(大概用于↑) 和history-beginning-search-forward
(用于↓)。
要将它们绑定到模式下的向上和向下键vicmd
,您只需运行
bindkey '^[[A' history-beginning-search-backward
bindkey '^[[B' history-beginning-search-forward
- 注 1:这会覆盖这些键的默认设置。
注 2:
^[[A
和^[[B
可能不是您的终端的正确代码。- Ctrl通过按+v和有问题的键来查找正确的键。
或利用关联数组
terminfo
来检索正确的绑定(我感谢斯蒂芬·查泽拉斯他对此的评论):bindkey "$terminfo[kcuu1]" history-beginning-search-backward bindkey "$terminfo[kcud1]" history-beginning-search-backward
kcuu1
和kcud1
是能力名称分别为↑和↓。您可以从terminfo(5)
联机帮助页 ( )获取可能的功能及其名称的列表man 5 terminfo
。关联数组terminfo
使用“Cap-name”列中的名称作为键。