Dans vim, lorsque je frappe ESC
pour revenir en mode commande, le curseur se déplace d'un caractère à gauche. Ce n’est pas ce que j’espérais, parfois j’ai immédiatement tenté l
de revenir à cet endroit, peut-être pour supprimer un personnage.
Y a-t-il une raison à ce comportement? Est-ce pratique pour un modèle d'utilisation qui me manque?
Réponses:
En mode insertion, le curseur est entre les caractères, ou avant le premier ou après le dernier caractère. En mode normal, le curseur est placé sur un caractère (les nouvelles lignes ne sont pas des caractères à cet effet). Ceci est un peu hors du commun: la plupart des éditeurs toujours mettre le curseur entre les caractères, et ont la plupart des commandes agissent sur le caractère après (non, à strictement parler, sous ) le curseur. Ceci est peut-être dû en partie au fait qu'avant les interfaces graphiques, les terminaux texte affichaient toujours le curseur sur un caractère (souligné ou bloc, peut-être clignotant). Cette abstraction échoue en mode insertion car cela nécessite une position supplémentaire (posts vs fences).
Pour passer d'un mode à l'autre, le curseur doit être déplacé d'un demi-caractère, pour ainsi dire. La
i
commande se déplace à gauche pour placer le curseur avant le caractère sur lequel il était terminé. Laa
commande se déplace bien. Le fait de sortir du mode insertion (en appuyant sur Esc) déplace le curseur à gauche si possible (s'il se trouve au début de la ligne, il est déplacé à droite).Je suppose que le Esccomportement a un sens. Souvent, vous tapez au bout de la ligne et vous Escne pouvez aller qu’à gauche. Le comportement général est donc le comportement le plus courant.
Pensez au caractère sous le curseur en tant que dernier caractère intéressant et à la commande d'insertion en tant que
a
. Vous pouvez répéter a Escsans déplacer le curseur, sauf que vous serez déplacé d'une position vers la droite si vous commencez au début d'une ligne non vide.la source
Visuellement, cela a plus de sens dans gvim:
Lors de l'édition, votre curseur est entre les caractères:
En mode normal, il se trouve au-dessus du dernier caractère:
Donc, ça ne remonte pas vraiment un personnage, juste d’être entre
r
ets
à être surr
la source
m
doit rester en surbrillance lors de son retour au mode normal ...Ce comportement est modifiable, comme indiqué ici , mais arrêtez-vous et réfléchissez à ce qui se passe pendant une seconde. Lorsque vous êtes en mode insertion, vous n'êtes pas réellement au-dessus d'un caractère mais entre eux. Lorsque vous insérez quelque chose, le curseur passe à la fin de ce que vous avez inséré pour que le prochain élément inséré soit placé après. Maintenant, pensez à si vous venez de taper une lettre, alors vous voulez y faire quelque chose. Frapper Escmettrait le curseur de sélection directement sur le dernier caractère que vous avez inséré. S'il ne le faisait pas, ce serait plutôt gênant.
La situation à laquelle vous pensez probablement est lorsque vous êtes en mode insertion et que vous vous déplacez comme si vous étiez en mode normal, puis que vous basculiez. Dans ce cas, le curseur semble revenir d’un caractère à l’autre, mais si vous pensez de cette façon, cela indique que vous êtes en mode d’insertion et que la dernière chose que vous avez faite est de ne PAS insérer. Peut-être devriez-vous passer plus de temps en mode normal?
la source
i
et deESC
pression de touche?i
suivi deESC
est fonction dei
et est totalement indépendant deESC
; plus précisément, lorsque vous frappez,i
vous demandez à vim d’ insérer un caractère, ce qui signifie par définition "insérer un caractère antérieur à celui sura
lequel je suis", par opposition à "ajouter un caractère après celui-ci".Tapez Alt+ Lpour revenir en mode commande.
Il ne nécessite aucune modification de la cartographie ou de la configuration de vim. Cela fonctionne parce que sur la plupart des émulateurs de terminal Alt+ KEYenvoie un Escsuivi de KEY(sur xterm, vous devrez peut-être ajouter une
Xterm*metaSendsEscape: true
ligne dans votre fichier ~ / .Xdefaults). Ce comportement vous permet même de "créer" d'autres combinaisons de mode d'insertion qui fonctionnent comme vous le feriez, comme Alt+ Svers Backspace.En passant, placer le curseur au-dessus du caractère que vous venez d'écrire peut être très gênant. Par exemple, Escdwne supprimez pas le mot après le texte que vous venez d'insérer.
la source
Esc d e
pour supprimer le mot précédent. Je suis revenu au comportement par défaut car je sentais qu'il changeait d'autres comportements déjà encodés dans ma tête.Voici ma solution.
C'est une version plus concise de la solution proposée sur la page wikia à ce sujet .
la source