【问题标题】:zsh vi mode status linezsh vi 模式状态行
【发布时间】:2011-04-07 01:56:57
【问题描述】:

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

命令行是否有等价物?

【问题讨论】:

标签: bash vi zsh


【解决方案1】:

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]; }

【讨论】:

  • hmmmm... 现在我想让 ctrl+c 在 -- INSERT -- 中不会退出命令,而是退出到 NORMAL 模式,然后最后 ctrl-c 在 NORMAL模式退出命令。
  • 在插入和普通模式下可以为Ctrl+C设置不同的绑定,只需将正确的选项传递给bindkey即可。
  • 甜蜜。我迫不及待地想这样做。
  • 如何在已有提示的情况下使用第二个(指示符在下方)?我将把现有的 $PROMPT 变量放在哪里?我已经尝试过了,但是在切换模式时标签不会在 INSERT 和 NORMAL 之间更新。
  • @user779159 把你的东西放在PS1。您需要使用PROMPTPS1,它们是别名。
【解决方案2】:

没错,我能理解你的顾虑,如果你不介意使用插件,我认为下面的一个可以帮助你完美地展示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
}

这是一个例子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2021-04-12
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多