zsh vi模式状态行

时间:2010-09-01 23:55:13

标签: bash vi zsh

在zsh或bash中是否有办法拥有状态行?例如在VI中,它会让你知道你处于插入模式 - 插入 -

命令行是否有等价?

2 个答案:

答案 0 :(得分:20)

这已在Super UserUnix Stack Exchange得到解答。为了Stack Overflow的完整性:

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

如果您希望指标位于当前行下方而不是右侧,则来自Unix Stack Exchange

terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]
function zle-line-init zle-keymap-select {
    PS1_2="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}"
    PS1="%{$terminfo_down_sc$PS1_2$terminfo[rc]%}%~ %# "
    zle reset-prompt
}
preexec () { print -rn -- $terminfo[el]; }

答案 1 :(得分:0)

没错,我能理解你的担忧,如果你不介意使用插件,我认为下面的一个可以帮助你完美地显示vi模式状态,还有更好的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