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


30

需要说明的是:在终端中使用vim时,我不问如何更改光标。我希望在Bash的vi模式下在输入模式和命令模式之间切换时光标会改变:

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

我发现了一个脚本该脚本可以在zsh中更改模式更改时光标的颜色,但是我不想仅为此一项功能更改shell。

在Bash命令行上的命令和插入模式之间切换时,是否有办法使光标改变形状,例如gvim(甚至只是颜色)?


-腻子,没有答案寿:(在SO同样的问题stackoverflow.com/questions/2393383/...
studgeek

Answers:


5

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

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

4
如果您解释了他们的工作并提供了一些上下文信息,例如,设置是否要求用户拥有特定版本的Readline,则该答案将更为有用。
安东尼G-莫妮卡的大法官


1
这仅适用于了解DECSCUSR的终端和终端仿真器。
JdeBP '18年

我不得不添加set show-mode-in-prompt on~/.inputrc也要使这项工作。
ronakg

4

从这里复制- 命令行编辑vim样式

应该在bash4.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.3 rc阶段,尽管没有在主存储库中,但您应该能够获得大多数发行版的软件包,而无需从源代码进行编译。例如。Ubuntu的(AMD64)这里和Debian(实验回购)在这里


请注意:如果您使用包含换行符的自定义PS1,则不会更新提示。在这里
pgericson

@pgericson似乎可以在bash 4.4.12上使用包含换行符的自定义PS1。
DuBistKomisch

2

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

您必须创建一个脚本(例如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之后才更改光标颜色。祝好运

b


这实际上对您有用吗?它对我没有用;它只是使光标变成红色。我认为kmtest.sh不会在每次在插入和命令模式之间切换时运行。似乎只能在创建提示时运行它。
joecan


1

虽然它不是您想要的(动态更改光标),但bash 4.4 / readline 7.0 将添加对动态更改提示的支持。您将能够为插入/命令模式指定自定义模式指示符(这与show-mode-in-prompt硬编码要使用的当前选项+和有所不同:)。

不幸的是,这些版本目前处于测试阶段,似乎还没有消除所有的错误。他们还缺少在提示中指定希望模式指示器出现的位置的功能。

在此期间,我已经使用此功能在github上发布了bash 4.3 / readline 6.3的修补程序版本。


0

Gvim过渡到Console Vim时,我在AskUbuntu上问了同样的问题。

我收到一个答案,但涉及切换gnome终端设置,并且这些设置适用于终端。因此,gnome终端光标有时可能会停留在错误的状态。

我仍然对您能否获得满意的解决方案感兴趣,但是随着时间的流逝,我已经适应了游标中缺少模式状态信息的问题。也许我只是更频繁地按Escape键(例如,esc确保我处于命令模式下;esc i确保我处于插入模式下);也许我看着屏幕底部显示的状态;也许我刚刚将模式内部化了。


3
只是为了澄清一下,您所质疑的与我的一样。您问如何在控制台上的Vim中更改光标。Vim Wiki上对此进行了详细记录。我想知道如何在Bash的vi模式下执行此操作
joecan 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.