当为 zsh 启用 vi 模式时(bindkey -v
),是否可以通过常规模式搜索历史记录,即输入几个字母并按向上/向下箭头键?
?
我发现这比按下 Esc 键,然后输入几个字母,按下 Enter 键,然后使用n
滚动浏览匹配项要快得多。
另外,似乎 vi 模式搜索可以匹配命令中的任何位置,我只想在命令的开头进行匹配,就像使用箭头键进行常规搜索一样。
答案1
请注意,您在这里讨论的是不同的搜索方法:
/使用或进行“vi 方式”搜索?将搜索历史记录中存储的全部命令。
您希望向上和向下箭头键执行的操作有所不同:您希望它们遍历历史记录中存储的与您已在命令行中输入的内容匹配(在它们的开头)的项目。
无需过多细节,以下应该是实现此目的的相当万无一失的方法:
autoload -Uz history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey -M vicmd '^[[A' history-beginning-search-backward-end \
'^[OA' history-beginning-search-backward-end \
'^[[B' history-beginning-search-forward-end \
'^[OB' history-beginning-search-forward-end
bindkey -M viins '^[[A' history-beginning-search-backward-end \
'^[OA' history-beginning-search-backward-end \
'^[[B' history-beginning-search-forward-end \
'^[OB' history-beginning-search-forward-end