Zsh使用zle
函数检查提示的状态。
根据您使用的Vi模式,KEYMAP
变量应该包含某些值。
它适用于INSERT
和COMMAND
模式,但我无法获得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
但输出在vicmd
和main
之间不断变化,当我按v
进入可视模式时,输出没有输出。
答案 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
}
这是一个例子: