Bash zsh vi模式状态行

Bash zsh vi模式状态行,bash,vi,zsh,Bash,Vi,Zsh,在zsh或bash中有没有一种方法可以设置状态行?e、 g.在VI中,它会让您知道您处于插入模式,并且 --插入-- 命令行是否有等价物?这已在和中得到回答。对于堆栈溢出的完整性: function zle-line-init zle-keymap-select { RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}" RPS2=$RPS1 zle reset-prompt } zle -N zl

在zsh或bash中有没有一种方法可以设置状态行?e、 g.在VI中,它会让您知道您处于插入模式,并且 --插入--


命令行是否有等价物?

这已在和中得到回答。对于堆栈溢出的完整性:

function zle-line-init zle-keymap-select {
    RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}"
    RPS2=$RPS1
    zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select
如果您希望指示器位于当前行下方而不是右侧,请从:


确切地说,我可以理解您的担忧,如果您不介意使用插件,我认为下面的插件可以帮助您完美地显示vi模式状态,以及在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
}
以下是一个例子:


hmmmm。。。现在,我想使处于--INSERT--状态的ctrl+c不会退出命令,而是退出到正常模式,最后在正常模式下ctrl-c退出命令。您可以在INSERT和正常模式下为ctrl+c设置不同的绑定,只需将正确的选项传递到
bindkey
.sweet即可。我迫不及待地想做这件事。我如何使用第二个(指示灯在下面)和我已经有的提示?我将把现有的$PROMPT变量放在哪里?我试过了,但切换模式时,标签在插入和正常之间不会更新。@user779159将您的东西放入
PS1
。您需要使用
PROMPT
PS1
,它们是别名。
# 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
}