9 votes

Dans vim, empêcher le caret de revenir en arrière lorsque je quitte le mode édition ?

Dans vim, si j'entre et quitte le mode édition sans rien faire, le signe d'insertion se retrouve un caractère à gauche. Et si j'entre et quitte le mode append, le signe d'insertion se déplace vers l'avant, puis vers l'arrière.

Y a-t-il un moyen de configurer vim pour qu'il laisse le signe d'insertion seul dans ces cas ?

Dans l'idéal, je veux juste entrer en mode append, mais sans déplacer le curseur lorsque j'entre ou sors de ce mode.

(Actuellement, j'utilise généralement le mode insertion parce qu'il ne perturbe pas la position de mon curseur lors de la saisie. C'est-à-dire, sauf quand je dois ajouter à la fin de la ligne, auquel cas je jure contre vim pour se comporter d'une manière aussi archaïque, j'appuie sur Esc et j'entre en mode append).

9voto

Patrick Klug Points 5320

Cette question est fréquemment posée par les nouveaux utilisateurs de vi/Vim. La réponse est la suivante : en mode normal, le curseur est toujours "sur" un caractère, mais en mode insertion, le curseur est toujours "entre" deux caractères (rappelez-vous que la fin de ligne est un caractère). Vous ne pouvez pas vraiment voir cela illustré aussi bien dans la console Vim, mais dans l'interface graphique, vous remarquerez que le curseur devient une barre entre deux caractères lorsque vous passez en mode insertion, au lieu d'un bloc sur un caractère lorsque vous êtes en mode normal.

Ainsi, ce que vous voyez n'est pas nécessairement le curseur qui recule d'un caractère lorsque vous quittez le mode d'insertion, mais simplement le déplacement sur un caractère. La seule direction de déplacement sûre est la gauche (ou l'arrière). Vous avez donc plus d'une façon d'entrer en mode insertion :

  • "a" entre en mode insertion avec le curseur "entre" le caractère sur lequel se trouvait le curseur et le caractère suivant à droite.
  • "i" entre en mode insertion avec le curseur "entre" le caractère sur lequel se trouvait le curseur et le caractère précédent à gauche.

Certaines personnes ont fait des efforts pour supprimer ce "mouvement" qu'elles n'aiment pas, mais il interfère inévitablement avec les plugins et autres scripts Vim qu'elles veulent exécuter à l'avenir.

Je vous suggère de vous habituer à utiliser les commandes "a" et "i" (et "A" et "I") dans les circonstances appropriées.

Les commandes "o" et "O" sont également utiles à apprendre. Voir :

:help a
:help i
:help A
:help I
:help o
:help O

Edit : Si vous êtes toujours déterminé à changer ce comportement, essayez cette astuce : Empêcher l'échappement de déplacer le curseur d'un caractère vers la gauche.

1voto

Je pense que par carat vous voulez dire votre curseur et si vous utilisez "i" cela va insérer directement là où se trouve votre curseur, "a" (que je crois que vous recherchez) déplace le curseur d'un caractère vers la droite. De même, shift-i(I) va au début de la ligne et shift-a(A) va jusqu'à la fin de la ligne.

Si j'ai mal compris votre question, je m'en excuse.

1voto

Howie Goodell Points 11

Puisque le remappage <ESC> est considéré comme "risqué", je le combine avec l'un des éléments suivants Évitez la touche "escape". et j'ai les éléments suivants dans mon .vimrc :

 inoremap ii <ESC>l

Note : Assurez-vous qu'il n'y a pas de caractères d'espacement à la fin de la ligne.

Simple, mais entièrement certifié comme "fonctionne bien pour moi" car c'est exactement ce que je devrais autrement taper à la main.

Que j'utilise a o i J'ai toujours le comportement du caret qui revient en arrière et cela me dérange car la plupart du temps la prochaine chose que je veux taper est d$ pour effacer jusqu'à la fin d'une ligne, etc.

1voto

cliss Points 56

Voici ma solution :

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])

C'est drôle. Cette même question existe sur les trois sites : SO, SU, Unix+Linux.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X