¿Retraso antes de que 'O' abra una nueva línea?

82

Me he dado cuenta de que, ocasionalmente, cuando uso O('o' mayúscula) para crear una nueva línea y entrar en modo de inserción, hay un pequeño retraso antes de que suceda algo.

¿Es esto común? ¿Hay alguna manera de cambiarlo?

Ambos :map Oy :imap Omuestran "No se encontró mapeo", así que no creo que sea un mapeo extraño.

David Wolever
fuente
Estoy de acuerdo con superuser.com: ¿quizás esto se deba a que el resaltado de sintaxis recalcula el formato?
monojohnny
4
No utilice etiquetas como "pertenece al superusuario". Las etiquetas no pretenden ser un medio para que usted exprese su opinión; consulte meta.stackexchange.com/questions/36819/… . Si cree que pertenece a SU, vote para moverlo allí.
Me han corregido. Ya no usaré esas etiquetas. Sigo pensando que esta muy buena pregunta es el tipo de pregunta que pertenece a SU y espero encontrarla allí.
jjclarkson
Sí, lo siento, tienes razón. Esto debería estar en SU. ¿Hay un botón rápido y fácil que pueda usar para
migrarlo

Respuestas:

91

Es porque la 'esckeys'opción está habilitada (una consecuencia de nocompatiblelo que acabo de descubrir). Cuando presiona ^[O, hay un pequeño retraso a medida que se da cuenta de si está usando una tecla de flecha / función o si solo quiso decir esas dos teclas en secuencia.

Una solución es desactivar esa opción y renunciar a las teclas de flecha en el modo de inserción.
Otra es establecer 'timeoutlen'algo menos de 1000, tal vez 100 (pero tenga cuidado con las conexiones lentas).
Otra es usar en ^Clugar de ^[salir del modo de inserción.

Josh Lee
fuente
¡Genial, gracias! Además, para cualquier otra persona que pueda estar leyendo esto: antes de apagarlo, revise la página de ayuda para ver 'esckeys'si es lo que le permite usar, por ejemplo, las teclas de flecha en el modo de inserción. El entorno 'timeoutlen'funcionó muy bien para mí.
David Wolever
3
También ttimeoutlenpuede establecer el tiempo de espera solo para códigos clave. Ver vim's:help ttimeoutlen
k107
1
Todavía tengo el retraso incluso después :set noesckeyso :set timeout timeoutlen=1000 ttimeoutlen=100... ¿Alguna idea? (Cygwin, VIM compilado de la fuente)
Yichuan Wang
1
Funcionó bien para mí con: set timeout timeoutlen = 3000 ttimeoutlen = 100 (como se recomienda en la ayuda de vim). Simplemente establecer timeoutlen en un valor pequeño fue una mala idea: algunas asignaciones dejaron de funcionar.
jkff
No lo entiendo. Cuando 'esckeys'está habilitado, ¿por qué no puedo escribir la secuencia <esc>[Aen el modo de inserción para mover el cursor hacia arriba?
Qian
3

Ocurre si presiona "O" justo después de la tecla Escape, ¿verdad? Siempre asumí que era porque el conductor de la terminal estaba esperando un poco para ver si ibas a completar una secuencia de escape.

Sean
fuente
0

Sospecho que es cuando tienes que escribir el archivo de intercambio en el disco. Asegúrese de ejecutar vim en una computadora con acceso rápido al disco; si tiene que usar un sistema de archivos compartido, puede intentar mover el archivo de intercambio usando

:set directory=/path/to/local/dir
Pedro
fuente
Apoyo esto: en el trabajo, nuestros directorios de inicio están montados en NFS, y veo mucho este tipo de demora.
Cascabel
... por supuesto, si es solo para O, no o, ciertamente es la secuencia de teclas de escape, como dice jleedev.
Cascabel
1
Bueno, aunque esta respuesta no aborda directamente OP, creo que sigue siendo relevante. No puedo estar de acuerdo con la persona que votó en contra.
Jeffrey Jose
No fue la respuesta al problema de OP, sino una buena teoría y una explicación instructiva. ¡Gracias!
Supervacuo