Reducción de velocidad en <Esc> O (Insertar a Normal para Insertar una nueva línea sobre el cursor)

16

A menudo, cuando estoy en el modo Insertar, presiono Escpara ingresar al modo Normal, y luego presiono inmediatamente Opara comenzar una nueva línea sobre el cursor y pasar al modo Insertar allí.

Pero cuando hago eso, hay un retraso de 1 segundo después de presionar Oantes de que haya una respuesta visible. Además si empieza a escribir el nuevo texto durante ese 1-segundo de retardo, si el nuevo texto comienza con cualquiera de un cierto conjunto de caracteres (por ejemplo j, k, m, n, o), termino en el medio de alguna otra operación que no lo hice intento, a menudo haciendo un desastre, momento en el que tengo que parar y hurgar con deshacer y rehacer hasta que esté razonablemente seguro de que he reparado el daño.

Para evitar esa molestia, tengo la costumbre de hacer una pausa por un segundo cada vez que escribo O. Pero esto me ralentiza y me impide ser el demonio de velocidad vim que de otro modo sería.

¿Qué causa esto? ¿Hay alguna solución o solución?

Don Hatch
fuente

Respuestas:

15

Esto sucede solo en la terminal, pero no en GVIM, ¿verdad? La razón es que Vim no puede distinguir entre las teclas de tipos individuales y una secuencia de escape ANSI que comienza con las mismas teclas (es decir ^[O..., <Esc>seguidas Oen su caso).

Puede leer sobre todas las complejidades subyacentes en :help 'timeout'(y las siguientes opciones). Allí también encontrará una configuración sugerida que alivia el problema:

:set timeout timeoutlen=1000 ttimeoutlen=100
Ingo Karkat
fuente
3
También puedes usar set noesckeys; Sin embargo, esto tiene el efecto secundario de deshabilitar las teclas de flecha (¿y quizás otras teclas?) en el modo Insertar, por lo que puede no ser para todos.
Martin Tournoij
2
@Carpetsmoker Con respecto a "establecer noesckeys" ... eso funciona, pero solo si está en modo Insertar. Sé que dije que estaba en modo Insertar para empezar; sin embargo, a menudo también hago <Esc> O a partir del modo Normal (principalmente cuando no estoy 100% seguro de si estoy comenzando en el modo Insertar o Normal), por lo que también me gustaría algo que funcione en ese caso.
Don Hatch
1
@DonHatch Puede usar :nnoremap ^[O O, donde ^[se ingresa presionando <C-v><Esc>(también puede aparecer como <1b>).
Martin Tournoij
5

Como solución alternativa, en lugar de ESCOusar Control+ OO. El Control+ lo Opone en modo normal para un comando, luego lo regresa al modo de inserción cuando termina.

Ross Presser
fuente
1

Qué tal si:

Control+C O

Hay algunas sutilezas cuando se usa Control+ Custed debe tener en cuenta.

mikeazo
fuente