检测Vi Visual模式的zsh KEYMAP模式

时间:2016-10-05 10:05:20

标签: shell zsh vi prompt

Zsh使用zle函数检查提示的状态。

根据您使用的Vi模式,KEYMAP变量应该包含某些值。

它适用于INSERTCOMMAND模式,但我无法获得VISUAL模式的触发器。

来自Zsh手册:

  

18.2键盘映射

     

ZLE中的键映射包含一组键序列之间的绑定   ZLE命令。空键序列无法绑定。

     

任何时候都可以有任意数量的键盘映射,每个键盘映射都有   一个或多个名字。如果删除了所有键映射的名称,则为   消失。 bindkey可用于操作键映射名称。

     

最初,有八个键映射:

     

emacs EMACS仿真

     

viins vi emulation - 插入模式

     

vicmd vi emulation - 命令模式

     

viopp vi emulation - operator pending

     

visual vi emulation - 选择活跃

     

isearch增量搜索模式

     

命令读取命令名称

     

.safe fallback keymap

我尝试了以下内容:

function zle-keymap-select {
    echo $KEYMAP
}
zle -N zle-keymap-select

但输出在vicmdmain之间不断变化,当我按v进入可视模式时,输出没有输出。

1 个答案:

答案 0 :(得分:0)

没错,我可以理解您的担忧,如果您不介意使用插件,我认为下面的可以完美地帮助您,还有在vi模式下获得更好体验的额外奖励等等.

zsh-vi-mode:用于 ZSH 的更好、更友好的 vi(vim) 模式插件。
https://github.com/jeffreytse/zsh-vi-mode

此插件提供了一个 ZVM_MODE 变量供您检索当前 vi 模式并更好地显示指示器。

目前支持以下模式:

ZVM_MODE_NORMAL
ZVM_MODE_INSERT
ZVM_MODE_VISUAL
ZVM_MODE_VISUAL_LINE

为了更新 vi 模式指示器,我们应该将我们的命令添加到 zvm_after_select_vi_mode_commands。例如:

安装此插件后

# The plugin will auto execute this `zvm_after_select_vi_mode` function
function zvm_after_select_vi_mode() {
  case $ZVM_MODE in
    $ZVM_MODE_NORMAL)
      # Something you want to do...
      ;;
    $ZVM_MODE_INSERT)
      # Something you want to do...
      ;;
    $ZVM_MODE_VISUAL)
      # Something you want to do...
      ;;
    $ZVM_MODE_VISUAL_LINE)
      # Something you want to do...
      ;;
  esac
}

这是一个例子:

demo