Способ различать командный режим и режим вставки в редакторе командной строки Vi Bash - PullRequest
50 голосов
/ 25 октября 2011

Меня всегда немного смущает, когда bash в vi-mode переключается на режим вставки, потому что он не дает никаких подсказок об используемом режиме (команда или редактирование). Есть ли способ отличить моды? Может быть автоматическое изменение цвета курсора или что-то подобное?

Ответы [ 3 ]

45 голосов
/ 16 сентября 2015

в / etc / inputrc (или ~ / .inputrc) добавьте это:

set show-mode-in-prompt on

это префикс вашего приглашения с + в режиме вставки и : в режиме команд в bash 4.3

EDIT: в последней версии bash 4.4 вместо этого вы получите приглашение с префиксом «(ins)» или «(cmd)» по умолчанию. но вы можете изменить это:

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

Кроме того, вы можете использовать цветовые коды, такие как '\ e [1; 31m', но окружить их '\ 1' и '\ 2', чтобы сохранить радость чтения:

set vi-cmd-mode-string "\1\e[1;31m\2:\1\e[0m\2"
36 голосов
/ 08 февраля 2017

Опираясь на ответ @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"

Это даст вам курсор луча в режиме вставки или курсор блока в обычном режиме.

Другие опции (заменить число после \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 также поддерживает их (если вы установите TERM=xterm-256color вне tmux).

11 голосов
/ 21 ноября 2011

После нескольких лет использования режима vi в оболочке korn я в основном научился просто нажимать ESC несколько раз, прежде чем вводить какие-либо команды, и ESC, а затем i, чтобы начать печатать.

Основная предпосылка заключается в том, что если вы просто нажмете ESC, вы точно знаете, в каком режиме находитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...