163 votes

Comment changer le curseur entre les modes Normal et Insertion dans Vim ?

J'aimerais savoir comment changer, si possible, le curseur dans Vim (en couleur, forme, etc.) en fonction du mode dans lequel on se trouve.

J'oublie constamment que je ne suis pas en mode Insertion et je commence à taper du code, ce qui entraîne toutes sortes de choses bizarres. Il serait utile qu'il y ait une sorte d'indication visuelle sur le curseur.

29 votes

Je vous suggère d'apprendre une règle : arrêter de taper => sortir du mode insertion. Ainsi, vous n'observerez jamais une situation où vous avez oublié que vous n'êtes pas en mode insertion.

7 votes

@ZyX sauf quand vous oubliez de quitter le mode insertion après avoir arrêté de taper :p

13 votes

@ZyX c'est une bonne règle et je l'ai toujours fait, mais les indicateurs visuels sont toujours importants. La marijuana est légale maintenant et j'oublie tout le temps ce que je fais.

11voto

Tim Gabets Points 139

Vous pouvez essayer le Plugin Terminus Vim :

En mode insertion, la forme du curseur se transforme en une fine barre verticale. En mode remplacement, il se transforme en un trait de soulignement. En revenant au mode normal, il reprend la forme standard du "bloc".

0 votes

Cela semble être la solution la plus raisonnable. Il devrait y avoir un :set pour cela directement dans le VIM, standard.

0 votes

Configuration requise : gnome-terminal ( wiki.gnome.org/Apps/Terminal ) et d'autres terminaux utilisant la bibliothèque VTE ( github.com/GNOME/vte ) : Partiellement supporté (par exemple, supporte les changements de forme du curseur mais pas les rapports de focus). Dans mon cas (gnome-terminal 3.6.2), cela ne fonctionne pas du tout.

10voto

user41365 Points 1

Je trouve utile de faire clignoter le curseur uniquement en mode Insertion et de le laisser statique dans les autres modes.

set guicursor+=n-v-c:blinkon0

1 votes

Cette solution fait clignoter un curseur dans tous les modes.

9voto

oat Points 238

Selon cette poste sur " Conseils pour Vim WiKi " :

"Pour changer la forme du curseur dans différents modes, vous pouvez ajouter ce qui suit dans votre vimrc :"

"Pour Terminal sur macOS"

"Mode Settings

let &t_SI.="\e[5 q" "SI = INSERT mode
let &t_SR.="\e[4 q" "SR = REPLACE mode
let &t_EI.="\e[1 q" "EI = NORMAL mode (ELSE)

"Cursor settings:

"  1 -> blinking block
"  2 -> solid block 
"  3 -> blinking underscore
"  4 -> solid underscore
"  5 -> blinking vertical bar
"  6 -> solid vertical bar

scripts pour d'autres OS sont également inclus dans ce post.

1voto

thrgamon Points 131

Si vous utilisez une version moderne de nvim et que vous souhaitiez atteindre cet objectif, vous pouvez éviter certaines des solutions de contournement sophistiquées énumérées ci-dessus.

Les paramètres ci-dessous permettent de passer du curseur de bloc en mode normal, au curseur de soulignement en mode remplacement et au curseur de ligne en mode insertion.

# ~/.tmux.conf
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q',w

" ~/.vimrc
" Sets cursor styles
" Block in normal, line in insert, underline in replace
set guicursor=n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20

J'ai réussi à le faire fonctionner avec les paramètres suivants tirés de ces deux sources.

tui-cursor-shape

guicurseur

1voto

Je ne pense pas que cela ajoute grand-chose aux réponses que d'autres personnes ont déjà fournies, mais je voulais en quelque sorte résumer les choses en un seul endroit et avoir des liens vers les références pertinentes.

C'est ce que l'extrait pertinent de mon .vimrc ressemble :

    " Cursor appearance
    "
    " See also: [1]'ANSI Control Functions Summary', [2]DECSCUSR, [3]xterm+tmux
    "   entry in terminfo.src.
    " [1] https://www.vt100.net/docs/vt510-rm/chapter4.html
    " [2] https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
    " [3] https://raw.githubusercontent.com/mirror/ncurses/master/misc/terminfo.src
    "
    " On:
    " - entered insert mode
    let &t_SI = "^[[5 q^[]12;Magenta\007" " blinking bar (Ss) in magenta (Cs)
    " - entered replace mode
    let &t_SR = "^[[0 q^[]12;Red\007" " blinking block (Ss) in red (Cs)
    " - leaving insert/replace mode
    let &t_EI = "^[[2 q^[]112\007" " terminal power-on style (Se) and colour (Cr)

Note : Le '^[' les personnages sont en fait un ESC (séquence d'échappement), caractère de contrôle.

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