60 votes

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

Je suis toujours un peu confus quand bash en vi-mode passe en insert-mode, parce qu'il ne donne aucune indication sur le mode utilisé (commande ou édition). Y a-t-il un moyen de distinguer les modes ? Peut-être un changement automatique de la couleur du curseur ou quelque chose comme ça ?

59voto

Isaac Hanson Points 776

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

set show-mode-in-prompt on

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

EDIT : dans la dernière version de bash 4.4, vous obtiendrez plutôt une invite préfixée par "(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"

55voto

hcris Points 9359

Dans le prolongement de la réponse de @Isaac Hanson, vous pouvez définir le style du curseur pour qu'il reflète le mode (comme dans VIM) en définissant ces paramètres dans votre fichier .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 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 supporter DECSCURSR (comme xterm, urxvt, iTerm2). TMUX les supporte également (si vous définissez TERM=xterm-256color en dehors de tmux).

14voto

Clarkey Points 487

Après des années d'utilisation du mode vi dans l'interpréteur de commandes korn, j'ai appris à me contenter de taper sur le clavier. ESC plusieurs fois avant de taper des commandes, et ESC puis i pour commencer à taper.

La prémisse de base étant que si vous tapez juste ESC vous savez précisément dans quel mode vous vous trouvez.

-2voto

Ayoubi Points 2390

Vous pouvez configurer vi pour qu'il vous indique le mode dans lequel vous vous trouvez en faisant :

set showmode

Et vous êtes prêt. Essayez aussi vim.

-4voto

Pabluez Points 1622

En raison de ce "problème" et de nombreux autres problèmes liés à la convivialité et aux fonctionnalités, vous devriez utiliser vim au lieu de vi. Lorsque vous utilisez vim, vous verrez un texte "-- INSERT --" en bas lorsque vous passez en mode insertion.

avec vi, il y a moyen.

EDIT :

Vim est à peu près la même chose que vi, mais amélioré et le plus souvent utilisé en dehors ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X