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

chu*_*uwy 54 vi bash command-line-interface

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

Isa*_*son 49

在/ etc/inputrc(或〜/ .inputrc)中添加:

set show-mode-in-prompt on
Run Code Online (Sandbox Code Playgroud)

这将在插入模式下使用+前缀,并且:在bash 4.3中的命令模式下

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

set vi-ins-mode-string "+"
set vi-cmd-mode-string ":"
Run Code Online (Sandbox Code Playgroud)

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

set vi-cmd-mode-string "\1\e[1;31m\2:\1\e[0m\2"
Run Code Online (Sandbox Code Playgroud)

  • 四年漫长的岁月.从哪个版本可用? (2认同)
  • 从4.3"Readline j中的新功能"开始.http://tiswww.case.edu/php/chet/bash/NEWS (2认同)

lak*_*tak 42

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

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"
Run Code Online (Sandbox Code Playgroud)

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

其他选项(替换后的数字\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).
Run Code Online (Sandbox Code Playgroud)

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

  • @MartianTomatoes 是的,只需将其附加到字符串值 (3认同)
  • @bloody - 当您在插入模式下按 Enter 时,它首先切换到命令模式(\e = ESC),这会在运行命令之前更新光标 (2认同)

Cla*_*key 11

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

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