¿Por qué vim se demora un segundo cada vez que uso el comando 'O' (abro una nueva línea arriba e inserto)?

26

Cuando uso la mayoría de los comandos, surten efecto instantáneamente. OSin embargo, cuando uso el comando, veo que la "O" reemplaza el carácter actual durante aproximadamente un segundo, luego el carácter actual regresa y se inserta y abre una nueva línea.

No tengo ese problema con el ocomando (abra una nueva línea a continuación e inserte).

Si hace la diferencia, estoy usando vimfrom bash, en la Terminal de Gnome en Ubuntu 10.04.

Mateo
fuente

Respuestas:

27

Si la tecla anterior presionada era ESC, esto se debe a que hay teclas que pueden generar secuencias de escape que comienzan con ESC O. Por ejemplo, dependiendo del modo de la tecla del cursor, la tecla de flecha hacia arriba puede generar la secuencia de escape ESC O A.

Si ve una secuencia de escape parcial, vim esperará un breve tiempo de espera para ver si se recibe otro carácter que coincida con una de las secuencias de escape definidas para su tipo de terminal. Si no, tratará a los caracteres como pulsaciones de teclas separadas. Puede probar esto ingresando una A mayúscula mientras espera que la línea se abra para ver si la trata como una flecha hacia arriba.

Hay algunas configuraciones de vim que se pueden usar para controlar esto. :set ttimeoutlen=100cambiará el tiempo de espera de la secuencia de escape a 100 ms. :set noesckeysdesactivará por completo el reconocimiento de las teclas que envían una secuencia de escape cuando está en modo de inserción. Además, el modo compatible con vi no tendrá este problema porque esckeys está desactivado en ese modo, es por eso que vim -u NONEfunciona.

mark4o
fuente
Solo para aclarar, mi "experimento" con el archivo de línea de 140k estaba en modo vim completo con mi complemento estándar de complementos y tipos de archivo. Puedo ver dónde podría haber llegado a la conclusión de que había usado, -u NONEpero todavía nos falta la confirmación del OP.
msw
¡Guauu! eso fue levemente irritante por un tiempo, pero nunca lo he pensado. Tiene mucho sentido ahora. Esc OA de hecho funciona igual que la flecha hacia arriba.
Vitaly Kushner
2
:set noesckeysprobablemente no sea lo que desea: configúrelo y luego presione las teclas de flecha en el modo de inserción, incluso si no planea usarlos, ¡no quiere que lo hagan! noesckeys tampoco acelera las cosas fuera del modo de inserción. ttimeoutlendefinitivamente es el camino a seguir
JonnyRaa