web-dev-qa-db-fra.com

La façon de distinguer le mode de commande et le mode d'insertion dans l'édition de ligne de commande Vi de Bash

Je suis toujours un peu confus lorsque bash en vi-mode passe en mode insertion, car cela ne donne aucun conseil sur le mode utilisé (commande ou modification). Existe-t-il un moyen de distinguer les mods? Peut-être un changement automatique de la couleur du curseur ou quelque chose comme ça?

56
chuwy

dans/etc/inputrc (ou ~/.inputrc) ajoutez ceci:

set show-mode-in-Prompt on

cela préfixera votre invite avec + en mode insertion, et : en mode commande dans bash 4.3

EDIT: dans la dernière version de bash 4.4, vous obtiendrez à la place une invite avec le préfixe "(ins)" ou "(cmd)" par défaut. mais vous pouvez changer cela:

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

vous pouvez également utiliser des codes de couleur comme '\ e [1; 31m', mais les entourer de '\ 1' et '\ 2' pour garder la ligne de lecture heureuse:

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

En vous appuyant sur la réponse de @Isaac Hanson, vous pouvez définir le style du curseur pour refléter le mode (comme dans VIM) en le définissant dans votre .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"

Cela vous donnera un curseur de faisceau en mode d'insertion ou un curseur de bloc pour le mode normal.

Autres options (remplacez le numéro après \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).

Votre terminal doit prendre en charge DECSCURSR (comme xterm, urxvt, iTerm2). TMUX les prend également en charge (si vous définissez TERM=xterm-256color en dehors de tmux).

38
laktak

Après des années d'utilisation du mode vi dans korn Shell, je me suis essentiellement entraîné à appuyer sur ESC plusieurs fois avant de taper des commandes, et ESC puis i pour commencer à taper .

Le principe de base étant que si vous appuyez simplement sur ESC, vous savez précisément dans quel mode vous êtes.

11
Clarkey