我正在使用 zsh,并且因为我是一个狂热的 Vim 用户,所以我只是切换到在命令行上使用 Vim 风格的编辑。(这意味着如果我输入ls foo/bar并决定我想要cd,我可以点击Esc ^跳回开头并cw cd更改ls为cd.
这都是花花公子,但问题是我不能再使用Ctrl+R递归历史搜索。有没有另一种方法可以做到这一点,或者我可以以某种方式覆盖 Vim 键绑定以取回它?
当然,您不能再使用Ctrl+ R。如果您查阅 Z Shell 手册,您将看到键盘映射中的history-incremental-search-backward小部件只有一个键绑定emacs。vi 键盘映射中没有它的键绑定。
但是,正如您在阅读手册(第 18 章)中也会发现的那样,添加键绑定是使用该bindkey命令的一个相当简单的练习:
bindkey "^R" history-incremental-search-backward
Run Code Online (Sandbox Code Playgroud)
您甚至不必使用该zle命令将小部件映射到 shell 函数,因为这是一个标准小部件。
如果您查阅Z Shell wiki 上相同问题的答案,您将看到专门将其添加到 vi“命令”和“插入模式”键映射的命令:
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
Run Code Online (Sandbox Code Playgroud)
另请注意,正如 garyjohn 指出的那样,在 vi“命令”键盘映射中,/字符绑定到vi-history-search-backward小部件。此小部件和history-incremental-search-backward小部件之间的区别在于小部件行为一旦进入历史搜索模式就会应用。以下是您会注意到的一些差异:
history-incremental-search-backward会在main和 键vicmd映射之间切换vi-cmd-mode。即从emacsmodeEsc按下键或Ctrl+ XCtrl+V键在emacs和键vicmd映射之间切换搜索模式。(因此history-incremental-search-backward从键vicmd映射调用很麻烦,除非您vi-cmd-mode也在键vicmd映射中绑定了一些东西。)vi-history-search-backward将vi-cmd-mode小部件视为accept-line并将结束搜索,重新进入您从中输入搜索的命令模式。即(使用默认绑定)/从命令模式进入搜索模式并Esc返回到命令模式。history-incremental-search-backward,可以识别history-incremental-search-backward和vi-rev-repeat-search小部件。即(假设您已按上述方式更改了绑定)Ctrl+R和N都将搜索前面的匹配行。vi-history-search-backward,仅vi-rev-repeat-search识别小部件。即(假设您已按上述方式更改了绑定)Ctrl+R将导致发出哔声并被忽略。| 归档时间: |
|
| 查看次数: |
1914 次 |
| 最近记录: |