在zsh或bash中是否有办法拥有状态行?例如在VI中,它会让你知道你处于插入模式 - 插入 -
命令行是否有等价?
答案 0 :(得分:20)
这已在Super User和Unix 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
}
这是一个例子: