Способ выделения командного режима и режима вставки в редакторе командной строки Bash Vi

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

Ответ 1

в/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", чтобы сохранить readline счастливым:

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

Ответ 2

Основываясь на ответе @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).

Ответ 3

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

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