在 zsh vi 模式下上下移动历史记录

在 zsh vi 模式下上下移动历史记录

尝试习惯使用 zsh 来匹配新的 Mac 默认设置,其中一件让我困惑的事情就是 vi 模式的差异。我已经在以下网址找到了答案我怎样才能使 zsh 的 vi 模式更像 bash 的 vi 模式?如何自定义 zsh 的 vim 模式?非常有用,但仍然有一些烦恼。

其中之一是浏览历史记录:每当我在命令列表中向上或向下移动时,光标都会移动到行尾,而不是像在 ksh 或 bash 中那样停留在行首。我附上了我想到的答案,以防它能帮助别人,但如果有更好的解决方案,请告诉我!

答案1

我发现的唯一解决方案是将光标向上和向下键绑定到向上或向下移动以及移动到行首的功能,作为两个操作:

zle-up-and-back() {
  zle .up-line-or-history
  zle .beginning-of-line
}
zle -N zle-up-and-back
bindkey -M vicmd k zle-up-and-back      # k in command mode
bindkey -M vicmd '^[[A' zle-up-and-back # cursor-up key in command mode
bindkey -M viins '^[[A' zle-up-and-back # cursor-up key in insert mode

zle-down-and-back() {
  zle .down-line-or-history
  zle .beginning-of-line
}
zle -N zle-down-and-back
bindkey -M vicmd j zle-down-and-back       # j in command mode
bindkey -M vicmd '^[[B' zle-down-and-back  # cursor-down key in command mode
bindkey -M viins '^[[B' zle-down-and-back  # cursor-down key in insert mode

相关内容