2010-09-09 16 views
28

Cuando cambio al modo comando en Vim, el cursor parece mover un carácter hacia atrás cuando está al final o sobre una palabra, y cuando voy al final de la línea con $ , no va al final de la línea sino a un carácter antes del final de la última palabra, y l ("el") no lo mueve hacia adelante y tengo que usar la tecla de flecha para llegar allí.Posicionamiento del cursor al ingresar al modo de inserción

No he podido encontrar la documentación de este comportamiento, pero esto me parece extraño. ¿Cuál es el razonamiento detrás de esto (por mi propia curiosidad), y cómo puedo evitarlo (o lidiar con él)?

+1

gracias a todos! muy útil. – hatmatrix

Respuesta

50

es un poco más claro si usa gvim, donde cambia el cursor.

modo de inserción en gvim tiene el cursor como una I-beam, ya que la siguiente letra que escriba se insertará después de |. el modo normal tiene el cursor de bloque, porque lo siguiente que escribe puede afectar la letra que está resaltada actualmente (como si usa x, s, etc.). Entonces el modo de inserción en realidad está agregando texto, pero el modo normal está modificando el texto de alguna manera.

Por lo tanto, en el modo normal, saltar al final de la línea realmente solo significa el último carácter, ya que es lo último que se puede modificar. en el modo insertar, el cursor pasa el último carácter, ya que es posible agregar cosas después.

Una cosa a tener en cuenta es que se puede controlar qué lado del bloque se termina al pasar de modo normal al modo de inserción



Digamos que usted tiene t [h] es texto

([] significa que el cursor de bloque es de más que h)



Digamos que usted tiene t | su texto

si ha presionado i en este punto, el cursor se vería así (en gvim) (| siendo el cursor del modo de inserción)



Digamos que usted tiene º | es texto

si ha presionado a en lugar de i, que se vería así



Otra cosa a tener en cuenta (como se menciona en pavanlimo), desde el modo normal puede ir a ins ert mode con el cursor justo antes del primer caracter de la línea, o justo después del último caracter, con shift-I o shift-A.

+1

Muy informativo. Gracias – hatmatrix

+1

contento de haber ayudado :) –

+14

Tecleo 'a' es lo que he estado esperando durante demasiado tiempo. Gracias Matt. – AshleyS

16

No estoy muy seguro del razonamiento detrás de él, pero se puede evitar pulsando:

Shift + a 
+0

Esto funciona, y el motivo es 'A'. Puede leer más [allí] (http://bullium.com/support/vim.html) –

5

Es dependiente de la implementación de si el cursor puede moverse más allá del final de la línea (al menos es una opción en el modo de emulación VIM de mi editor). Puede presionar a para ingresar al modo de inserción y comenzar a editar después del carácter actual en esta situación (en lugar de i).

7

Esto se debe a que todos los comandos que utiliza afectan a la letra sobre la que se encuentra el cursor. Si no tiene sentido, presione x (eliminar 1 letra) detrás de la letra real.

No hay necesidad de mover el cursor en el modo de comando detrás de la última letra, si quiere p. Agregar puede presionar a que coloca el cursor detrás de la letra en el modo de inserción.

10

Usted puede estar interesado en la opción virtualedit y el siguiente valor:

set virtualedit=onemore 

Con esta opción se puede mover el cursor un carácter sobre el extremo de la línea y pulse i para insertar modo después del último personaje.

Esto resuelve el problema de una manera pero personalmente me parece un poco extraño este comportamiento. Sólo en algunos casos se encuentra con el problema por lo que podría valer la pena hacer caso de él ;-)

1

Sugiero

:set virtualedit=onemore 
:inoremap <Esc> <Esc>`^ 
+0

¿Por qué sugieres cambiar el comando i (para ingresar al modo de edición)? –

+0

Para evitar que el cursor se mueva un caracter a la izquierda. – Alexey

Cuestiones relacionadas