我喜欢使用以下键绑定来搜索我的命令历史记录:
<ESC>/
Type in command fragment<RET>
n => to look backwards in time
N => to go forwards
当您在 ZSH 中使用“vi 模式”时,这种方法很有效,但我最近在 .zshenv 文件中将 vim 添加为默认编辑器。现在,当我按“/”时,我会看到以下内容:
tom@flanders ~ZSH [master]
± %
zsh: do you wish to see all 5226 possibilities (5226 lines)?
我发现这个键绑定看起来很有希望,但并没有什么区别:
bindkey -M vicmd '/' history-incremental-pattern-search-backward
我还遗漏了什么吗?
答案1
首先,我确实觉得这有点奇怪:默认情况下,zsh 使用 emacs 样式(escape 后跟一个键)组合键,除非它处于 vi 模式,此时 emacs 样式组合键被禁用。如果您使用类似 vi 的编辑器作为默认编辑器,zsh 也会将自己置于 vi 模式。所以,在我看来,你可能不是最初处于 vi 模式,直到您编辑了 zshenv。
因此,我首先要问:您是否 100% 确定您一直在使用 vi 模式?也就是说,这是否bindkey -e
解决了您的问题(在打开的 shell 中尝试)?
也许你确实更适合使用 emacs 模式 ( bindkey -e
)。另一方面,也许你想使用 vi 模式,但最好使用一些 emacs 风格的绑定。
或者,也许我完全错了,我应该只关注你的写得错误的绑定语句。
首先,“vicmd”位的加入使得它在插入(正常)模式下无法工作:只有当你第一的按 Esc 键(单独按)离开插入模式进入命令模式(就像在 vim 中一样)。因此,您不能按“esc-/”作为和弦键(尝试按 Esc 键,释放它,然后按“/”)。
尝试以下绑定:
bindkey '\e/' history-incremental-pattern-search-backward
现在您应该能够按“escape-/”作为和弦并获得所需的结果。