在Bash的Vi命令行编辑中区分命令模式和插入模式的方法

时间:2011-10-25 11:12:05

标签: bash vi command-line-interface

当vi-mode中的bash切换到插入模式时,我总是有点困惑,因为它没有给出关于使用模式(命令或编辑)的任何提示。 有没有办法区分mods?可以自动更改光标颜色或类似的东西吗?

3 个答案:

答案 0 :(得分:45)

在/ etc / inputrc(或〜/ .inputrc)中的

添加:

set show-mode-in-prompt on

这将在插入模式下使用 + 为您的提示添加前缀,在bash 4.3中的命令模式下为添加前缀

修改 在最新版本的bash 4.4中,默认情况下,您将获得前缀为“(ins)”或“(cmd)”的提示。但是,你可以改变:

set vi-ins-mode-string "+"
set vi-cmd-mode-string ":"

另外,您可以使用'\ e [1; 31m'这样的颜色代码,但用'\ 1'和'\ 2'包围它们以保持readline快乐:

set vi-cmd-mode-string "\1\e[1;31m\2:\1\e[0m\2"

答案 1 :(得分:35)

在@Isaac Hanson的回答基础上,您可以通过在.inputrc中设置这些来设置光标样式以反映模式(就像在VIM中一样):

set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2

# optionally:
# switch to block cursor before executing a command
set keymap vi-insert
RETURN: "\e\n"

这将为您提供插入模式下的光束光标或正常模式下的块光标。

其他选项(替换\e[后面的数字):

        Ps = 0  -> blinking block.
        Ps = 1  -> blinking block (default).
        Ps = 2  -> steady block.
        Ps = 3  -> blinking underline.
        Ps = 4  -> steady underline.
        Ps = 5  -> blinking bar (xterm).
        Ps = 6  -> steady bar (xterm).

您的终端必须支持DECSCURSR(如xterm,urxvt,iTerm2)。 TMUX也支持这些(如果你在tmux之外设置TERM=xterm-256color)。

答案 2 :(得分:11)

在korn shell中使用vi模式多年后,我基本上已经训练过自己在键入任何命令前点击ESC几次,然后ESC然后i开始输入

基本前提是如果你只是点击ESC,就会确切地知道你所处的模式。