更改光标形状(或颜色)以指示 bash 中的 vi 模式

更改光标形状(或颜色)以指示 bash 中的 vi 模式

澄清:我不是问如何在终端中使用 vim 时更改光标。我希望在 Bash 的 vi 模式下在输入模式和命令模式之间切换时光标发生变化:

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

我发现一个脚本这使得在模式改变时改变光标的颜色成为可能桀骜,但我不想仅仅为了这一功能而改变外壳。

在 Bash 命令行上的命令模式和插入模式之间切换时,有没有办法让光标改变形状,就像在 gvim 中一样(甚至只是颜色)?

答案1

将这两行添加到〜/.inputrc:

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2

答案2

从这里复制 -命令行编辑vim风格

bash应该在4.3中可用- 请参阅变更日志-

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash目前处于 4.3rc阶段,您应该能够在不从源代码编译的情况下获得大多数发行版的软件包,尽管不在主存储库中。例如。 Ubuntu (amd64)这里和 Debian(实验性仓库)这里

答案3

我还没有找到真正的解决方案,但这也许可以帮助您(或其他人)找到更好的解决方案。

您必须创建一个脚本(例如 kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

将其添加到您的 PS1 后,如下所示:

export PS1="\u@\h \$(kmtest.sh)> "

但正如我所说,这不是您想要的,因为它仅在 cr 之后才更改光标颜色。祝你好运

国标

答案4

看起来可能有一种方法可以通过破解 readline 来做到这一点。也许我们可以推动它成为主流?

这是我对SO的回答https://stackoverflow.com/a/12201092/255961如果我得到更多信息,我会更新。

相关内容