Accélération sur <Esc> O (Insérer à la normale pour insérer une nouvelle ligne au-dessus du curseur)

16

Souvent, lorsque je suis en mode Insertion, je frappe Escpour passer en mode Normal, puis immédiatement Opour commencer une nouvelle ligne au-dessus du curseur et y passer en mode Insertion.

Mais quand je le fais, il y a un délai d'une seconde après que j'ai frappé Oavant qu'il n'y ait de réponse visible. En outre , si je commence à taper le nouveau texte pendant que 1 secondes de retard, si le nouveau texte commence par une d'un certain jeu de caractères (par exemple j, k, m, n, o), je me retrouve au milieu d'une autre opération , je ne l' ai pas l'intention, faisant souvent un gâchis, à quel point je dois m'arrêter et tâtonner avec défaire et refaire jusqu'à ce que je sois raisonnablement sûr d'avoir réparé les dégâts.

Pour éviter ce désagrément, j'ai pris l'habitude de faire une pause d'une seconde après chaque fois que je tape O. Mais cela me ralentit et m'empêche d'être le démon de vitesse vim que je serais autrement.

Qu'est-ce qui cause cela? Existe-t-il un correctif ou une solution de contournement?

Don Hatch
la source

Réponses:

15

Cela se produit uniquement dans le terminal, mais pas dans GVIM, non? La raison en est que Vim ne peut pas faire la distinction entre les clés de types individuels et une séquence d'échappement ANSI commençant par les mêmes clés (c'est ^[O...-à- dire <Esc>suivies de Ovotre cas).

Vous pouvez lire sur toutes les complexités sous-jacentes à :help 'timeout'(et les options suivantes). Vous y trouverez également une configuration suggérée qui atténue le problème:

:set timeout timeoutlen=1000 ttimeoutlen=100
Ingo Karkat
la source
3
Vous pouvez également utiliser set noesckeys; cela a pour effet secondaire de désactiver les touches fléchées (et peut-être d'autres touches?) en mode Insertion, donc cela peut ne pas être pour tout le monde.
Martin Tournoij
2
@Carpetsmoker Concernant "set noesckeys" ... ça marche, mais seulement en mode Insertion. Je sais que j'ai dit que j'étais en mode Insertion pour commencer; mais je fais aussi souvent <Esc> O à partir du mode Normal (principalement lorsque je ne suis pas sûr à 100% si je démarre en mode Insert ou Normal), donc j'aimerais quelque chose qui fonctionne dans ce cas aussi.
Don Hatch
1
@DonHatch Vous pouvez utiliser :nnoremap ^[O O, où ^[est entré en appuyant sur <C-v><Esc>(peut également apparaître comme <1b>).
Martin Tournoij
5

Comme solution de contournement, au lieu de ESCO, utilisez Control+ OO. Le Control+ Ovous met en mode normal pour une commande, puis vous ramène en mode insertion une fois terminé.

Ross Presser
la source
1

Que diriez-vous:

Control+C O

Il y a quelques subtilités lors de l'utilisation de Control+, Cvous devez en être conscient.

mikeazo
la source