10
votes

Pourquoi laisser le mode insertion déplace la position du curseur à gauche

Lorsque nous sommes en mode insertion dans Vim:

foo b [a] r

[] dénote la position du curseur

Et nous revenons en mode normal, le curseur va une position à gauche:

foo [b] ar

Y a-t-il un avantage de cela?

vim

3 commentaires

Quel est "un tel état"? Insérer le mode?


@Marcb Oui, Mode Insérer


Pourquoi cette question a-t-elle été marquée «duplicata», quand il demande clairement à propos de laissant le mode insertion, alors que la "droite" question pose sur entrant le mode insertion?


5 Réponses :


3
votes

Je ne vois pas un avantage direct sur seulement taper h .

Le mouvement observé à gauche est un produit latéral d'une convention dans VIM - laissez toujours un mode d'insertion «à gauche» - que je trouve très pratique.

pratique, car il existe de nombreuses façons d'entrer en mode insertion et, après avoir effectué certaines insertions, je me soucie de savoir comment sortir de la manière dont je suis entré en mode insertion.

Il existe des moyens de changer ce comportement, cf. Ces postes SE:


0 commentaires

2
votes

Cela pourrait être parce que vous n'êtes pas autorisé à déplacer le curseur dans la zone écrite, par exemple, la barre [] doit devenir BA [R] lorsqu'il n'est pas en mode d'insertion, mais vous avez raison, il n'a pas besoin d'arriver toujours


1 commentaires

@Jan Changer de ligne est toujours un changement valide dans le document lorsque vous échappez à l'insertion-mode, le curseur recule du caractère suivant à la nouvelle ligne qui ne fait aucune différence. par exemple de [] à [\ n] qui signifie nouvelle ligne (donc cela n'échappe pas à la nouvelle ligne)



3
votes

Eh bien, la convention est Vim est différente de ce que nous sommes habitués. Voir, par exemple, comment la pâte Coller par défaut fonctionne. Si vous appuyez sur P - Le texte timbre apparaît après le curseur au lieu du curseur comme nous nous habituons.

Et où est le curseur situé à la fin de la pâte ? Il est situé un personnage avant la fin du nouveau texte! Donc, si vous voulez continuer à écrire après le texte, vous devez passer à droite, puis appuyez sur i !

Vous devez simplement passer à penser que le curseur réel est un caractère à droite (ou en bas) que celui que vous voyez. C'est la convention Vim.

Si vous commencez à utiliser A / o Pour saisir le mode insertion par défaut au lieu de i / o , Cela pourrait vous aider à faire cela. Il suffit de transmettre votre pensée afin que a est la valeur par défaut, puis la pâte et l'emplacement du curseur en sortie insert , et beaucoup d'autres choses auront plus de sens.

Modifier

Quelques mots supplémentaires pour répondre à votre question (plutôt que de vous aider à faire face au comportement)

La caractéristique la plus importante de VIM est la cohérence du comportement. L'objectif est de vous permettre de savoir exactement ce qui va se passer sans même regarder l'écran.

Donc, lorsque vous quittez Insérer le mode , où le curseur doit-il être? Il ne peut pas après le texte, car si le texte se termine à la fin de la ligne, le curseur ne peut pas y arriver! (ne peut pas être après fin de ligne). Idem pour coller - Si vous collez à la fin d'une ligne, le curseur résultant ne peut pas être après le texte inséré!.

En raison de la nécessité de cohérence - si cela ne peut parfois pas être après le texte inséré, il ne faut jamais être là. Sinon, si vous tapez sans regarder l'écran, vous ne savez pas où le curseur sera - vous devrez regarder et vérifier!

Beaucoup de comportements de Vim peuvent être expliqués comme ceci: pourquoi "^ 'est-ce que" ^' vous donne-t-il au premier personnage et non à un avant-avant-première? (de sorte que a fonctionnerait pour insérer, comme s'il le fait avec coller , $ etc.) car si le premier caractère est au début de La ligne - vous ne pouvez pas aller "un avant". Et vous voulez être cohérent.


0 commentaires

6
votes

du Vim FAQ :

10.2. In insert mode, when I press the <Esc> key to go to command mode, the
 cursor moves one character to the left (except when the cursor is on
 the first character of the line). Is it possible to change this
 behavior to keep the cursor at the same column?

No. It is not possible to change this behavior. The cursor is *always*
positioned on a valid character (unless you have virtual-edit mode
enabled). So, if you are appending text to the end of a line, when you
return to command mode the cursor *must* drop back onto the last character
you typed. For consistency sake, the cursor drops back everywhere, even if
you are in the middle of a line.

You can use the CTRL-O command in insert mode to execute a single ex
command and return back to insert mode without moving the cursor column.


3 commentaires

Je ne pense pas, c'est une bonne argumentation pour cette interaction de i et . (a): i n'est pas le moyen prévu de "annoncer le texte à une ligne". (2): revenir à "Toujours" sur un caractère valide n'est pas vrai, par exemple lorsqu'il est situé au début d'une ligne (éventuellement vide).


@Benj 'Non. Il n'est pas possible de changer ce comportement. Pourquoi Wiki dit-il que ce n'est pas possible, c'est parfaitement possible. Il suffit d'ajouter ceci à votre VIMRD. inoremap L


@saga Essayez de faire cela lorsque vous êtes sur le premier personnage de la ligne et vous trouverez que c'est un peu frustrant.



5
votes

Votre «état» initial est faux, c'est ce que vous obtenez en mode insertion: xxx

en mode insertion, le curseur est entre les caractères pendant qu'il est sur un caractère en mode normal. Lorsque vous laissez un mode insertion, le curseur a pour être sur un caractère: quel personnage pourrait-il être? Celui de gauche du curseur de mode insertion ou celui de droite? Comment Vim est-il censé décider de quel côté est le bon?

Un indice serait la commande utilisée pour entrer en mode insertion: laissant le mode insertion après i pourrait probablement laisser le curseur sur Le côté gauche et A pourraient probablement laisser tomber sur le côté droit. Mais, quel serait le point d'avoir le curseur sur le personnage qui est à droite du dernier caractère que nous avons tapé?

Quoi qu'il en soit, le mode Insérer est destiné à insérer du texte exclusivement . i ou A n'a aucun sens et ne servez pas de but pratique. D'autre part: xxx

fait beaucoup plus de sens que: xxx

n'est-ce pas?


6 commentaires

Cela n'a pas plus de sens, pas pour moi


@theonlygusti Lorsque vous quittez le mode Insertion, le curseur est positionné au dernier caractère que vous avez entré.


@saga mais je ne pense pas que cela devrait être, à moins que ce soit la fin d'une ligne. Je me sens comme le curseur doit être positionné, bien, le curseur


@theonlygusti Supposons que vous souhaitiez ajouter Nom: myName à une chaîne et myName est dans un registre. Étant donné que le curseur est placé au dernier caractère entré, vous pouvez simplement taper nom: , appuyez sur Echap et copiez le contenu avec p . Si le curseur se comporte comme si vous le dites, vous devrez le déplacer un personnage avant de coller le registre. Il deviendra intuitif une fois que vous l'essayerez. (On peut dire que Vim aussi ;-)


BTW, vous pouvez obtenir le comportement souhaité en ajoutant ceci à votre VIMRC: inoremap L . Mais ce n'est pas recommandé. Je l'ai eu dans mon VIMRC, maintenant je ne le fais pas, car il est contre-productif.


@saga Dans ce cas, vous pouvez simplement utiliser p