问题
I'm always little bit confused when bash in vi-mode is switched to insert-mode, because it doesn't give any tip about used mode (command or edit). Is there any way to distinguish mods? May be automatic change of cursor color or something like that?
回答1:
in /etc/inputrc (or ~/.inputrc) add this:
set show-mode-in-prompt on
this will prefix your prompt with + while in insert-mode, and : while in command mode in bash 4.3
EDIT: in the latest version of bash 4.4, you will instead get a prompt prefixed with "(ins)" or "(cmd)" by default. but, you can change that:
set vi-ins-mode-string "+"
set vi-cmd-mode-string ":"
also, you can use color codes like '\e[1;31m', but surround them with '\1' and '\2' to keep readline happy:
set vi-cmd-mode-string "\1\e[1;31m\2:\1\e[0m\2"
回答2:
Building on @Isaac Hanson's answer you can set the cursor style to reflect the mode (just like in VIM) by setting these in your .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"
This will give you a beam cursor in insert mode or a block cursor for normal mode.
Other options (replace the number after \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).
Your terminal must support DECSCURSR (like xterm, urxvt, iTerm2). TMUX also supports these (if you set TERM=xterm-256color
outside tmux).
回答3:
After years of using vi mode in korn shell, I have basically trained myself to just tap ESC
a few times before I type any commands, and ESC
then i
to start typing.
The basic premise being that if you just hit ESC
, you know precisely what mode you are in.
来源:https://stackoverflow.com/questions/7888387/the-way-to-distinguish-command-mode-and-insert-mode-in-bashs-vi-command-line-ed