![更改光标形状(或颜色)以指示 bash 中的 vi 模式](https://linux22.com/image/18275/%E6%9B%B4%E6%94%B9%E5%85%89%E6%A0%87%E5%BD%A2%E7%8A%B6%EF%BC%88%E6%88%96%E9%A2%9C%E8%89%B2%EF%BC%89%E4%BB%A5%E6%8C%87%E7%A4%BA%20bash%20%E4%B8%AD%E7%9A%84%20vi%20%E6%A8%A1%E5%BC%8F.png)
澄清:我不是问如何在终端中使用 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如果我得到更多信息,我会更新。