Shell 检测Vi视觉模式的zsh键映射模式
Zsh使用Shell 检测Vi视觉模式的zsh键映射模式,shell,zsh,vi,prompt,Shell,Zsh,Vi,Prompt,Zsh使用zle功能检查提示符的状态 有一个KEYMAP变量,根据您使用的Vi模式,该变量应该保存某些值 它在INSERT和COMMAND模式下工作正常,但在VISUAL模式下我无法获得触发器 从Zsh手册: 18.2关键地图 ZLE中的键映射包含键序列和 ZLE命令。无法绑定空键序列 任何时候都可以有任意数量的关键点地图,并且每个关键点地图都有 一个或多个名称。如果删除了所有键映射的名称,则 消失了。bindkey可用于操纵键映射名称 最初,有八个关键地图: emacs emacs仿真 vii
zle
功能检查提示符的状态
有一个KEYMAP
变量,根据您使用的Vi模式,该变量应该保存某些值
它在INSERT
和COMMAND
模式下工作正常,但在VISUAL
模式下我无法获得触发器
从Zsh手册:
18.2关键地图
ZLE中的键映射包含键序列和
ZLE命令。无法绑定空键序列
任何时候都可以有任意数量的关键点地图,并且每个关键点地图都有
一个或多个名称。如果删除了所有键映射的名称,则
消失了。bindkey可用于操纵键映射名称
最初,有八个关键地图:
emacs emacs仿真
viins vi仿真-插入模式
vicmd vi仿真-命令模式
viopp vi仿真-运算符挂起
可视化虚拟仪器仿真-选择激活
isearch增量搜索模式
命令读取命令名
.安全备用钥匙图
我尝试了以下方法:
function zle-keymap-select {
echo $KEYMAP
}
zle -N zle-keymap-select
但是输出在
vicmd
和main
之间不断变化,当我按v
进入视觉模式时,没有输出。确切地说,我可以理解您的担忧,如果您不介意使用插件,我认为下面的插件可以帮您大忙,此外,在vi模式等方面获得更好体验的额外好处
zsh vi模式:更好、更友好的zsh vi(vim)模式插件。该插件提供了一个
ZVM_MODE
变量,用于检索当前vi模式并更好地显示指示器
目前支持以下模式:
ZVM_MODE_NORMAL
ZVM_MODE_INSERT
ZVM_MODE_VISUAL
ZVM_MODE_VISUAL_LINE
为了更新vi模式指示器,我们应该在选择vi模式命令后将命令添加到zvm\u。例如:
安装此插件后
# 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
}
以下是一个例子:
确切地说,我可以理解您的担忧,如果您不介意使用插件,我认为下面的插件可以非常完美地帮助您,还可以在vi模式下获得更好的体验,等等
zsh vi模式:更好、更友好的zsh vi(vim)模式插件。
该插件提供了一个ZVM_MODE
变量,用于检索当前vi模式并更好地显示指示器
目前支持以下模式:
ZVM_MODE_NORMAL
ZVM_MODE_INSERT
ZVM_MODE_VISUAL
ZVM_MODE_VISUAL_LINE
为了更新vi模式指示器,我们应该在选择vi模式命令后将命令添加到zvm\u。例如:
安装此插件后
# 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
}
以下是一个例子:
在zsh中,视觉模式不是单一状态:它是由设置的标记、激活的区域和vi命令模式的组合定义的。您可以使用自定义小部件或emacs小部件单独更改这些状态。viopp和visual仅用作本地键映射,vicmd保留选定的键映射。这意味着您不需要在三个键映射中重复许多vi风格的绑定:vicmd中的绑定是共享的,请注意,与vicmd相比,visual和viopp包含的绑定是多么少。但这也意味着它们从未被选中触发回调。我用它来获取一个名为vivis的可视模式键映射。在zsh中,可视模式不是一个单一的状态:它是由设置的标记、活动的区域和vi命令模式的组合定义的。您可以使用自定义小部件或emacs小部件单独更改这些状态。viopp和visual仅用作本地键映射,vicmd保留选定的键映射。这意味着您不需要在三个键映射中重复许多vi风格的绑定:vicmd中的绑定是共享的,请注意,与vicmd相比,visual和viopp包含的绑定是多么少。但这也意味着它们从未被选中触发回调。我用它来获取一个名为vivis的可视模式键映射。可能就是你想要的。