En vim, cuando presiono ESC
para volver al modo de comando, el cursor mueve un carácter a la izquierda. Esto no es lo que esperaría, ocasionalmente golpeé de inmediato l
para volver a ese lugar, tal vez para eliminar un personaje.
¿Hay alguna razón para este comportamiento? ¿Es conveniente para un patrón de uso que me falta?
Respuestas:
En el modo de inserción, el cursor está entre caracteres, o antes del primero o después del último carácter. En modo normal, el cursor está sobre un carácter (las nuevas líneas no son caracteres para este propósito). Esto es algo inusual: la mayoría de los editores siempre colocan el cursor entre los caracteres y hacen que la mayoría de los comandos actúen sobre el carácter después (no, estrictamente hablando ) debajo del cursor. Esto quizás se deba en parte al hecho de que antes de las GUI, los terminales de texto siempre mostraban el cursor sobre un carácter (subrayado o bloque, quizás parpadeando). Esta abstracción falla en el modo de inserción porque eso requiere una posición más (publicaciones vs cercas).
Cambiar entre modos tiene que mover el cursor por medio carácter, por así decirlo. El
i
comando se mueve hacia la izquierda, para colocar el cursor antes del personaje que había terminado. Ela
comando se mueve hacia la derecha. Salir del modo de inserción (presionando Esc) mueve el cursor hacia la izquierda si es posible (si está al comienzo de la línea, se mueve hacia la derecha).Supongo que el Esccomportamiento tiene sentido. A menudo, está escribiendo al final de la línea, y Escsolo puede ir a la izquierda. Entonces el comportamiento general es el comportamiento más común.
Piense en el carácter debajo del cursor como el último carácter interesante y en el comando de inserción como
a
. Puede repetir a Escsin mover el cursor, excepto que se le golpeará una posición a la derecha si comienza al principio de una línea no vacía.fuente
Visualmente, tiene más sentido en gvim:
Al editar, el cursor está entre los caracteres:
Cuando está en modo normal, está encima del último carácter:
Así que en realidad no se vuelve un personaje, sólo por estar entre
r
ys
al estar enr
fuente
m
debe permanecer resaltado al regresar al modo normal ...Este comportamiento es editable como se respondió aquí , pero deténgase y piense en lo que está sucediendo por un segundo. Cuando está en modo de inserción, en realidad no está sobre un personaje sino ENTRE ellos. Cuando inserta algo, el cursor salta al final de lo que insertó para que lo siguiente que se inserte sea después de eso. Ahora piense si simplemente escribió una carta y luego quiso hacerle algo. Golpear Esccolocaría el cursor de selección directamente sobre el último carácter que insertó. Si no hiciera esto, en realidad sería bastante incómodo.
La situación en la que probablemente esté pensando es cuando está en modo de inserción moviéndose como si fuera el modo normal y luego cambia. En ese caso, parece que el cursor retrocede un carácter, pero si piensa de esa manera, muestra que estaba en modo de inserción y que lo último que hizo fue NO insertar. ¿Tal vez deberías pasar más tiempo en modo normal?
fuente
i
y lasESC
pulsaciones de teclas?i
seguido porESC
es una función dei
y es totalmente independiente deESC
; específicamente, cuando golpeas,i
le estás pidiendo a vim que inserte un carácter, que por definición significa "insertar un carácter antes del que estoy", en lugar dea
"agregar un carácter después de este".Escriba Alt+ Lpara volver al modo de comando.
No requiere ninguna reasignación o cambio de configuración de vim. Funciona porque en la mayoría de los emuladores de terminal Alt+ KEYenvía un Escseguido de KEY(en xterm puede que necesite agregar una
Xterm*metaSendsEscape: true
línea en su archivo ~ / .Xdefaults). Ese comportamiento le permite incluso "crear" otras combinaciones de modo de inserción que funcionan de inmediato, como Alt+ Sa Backspace.Por cierto, tener el cursor encima del carácter que acabas de escribir puede ser muy inconveniente. Por ejemplo, Escdwno eliminará la palabra que sigue al texto que acaba de insertar.
fuente
Esc d e
para eliminar la palabra en frente. Volví al comportamiento predeterminado porque sentí que cambió otros comportamientos ya codificados en mi cabeza.Aquí está mi solución.
Es una versión más concisa de la solución ofrecida en la página de wikia sobre esto .
fuente