2011-04-29 6 views
12

El comando d{motion} parece funcionar de manera incompatible:¿Por qué "d1j" elimina dos líneas en vim?

d1j " deletes 2 lines to the bottom 
d1l " deletes 1 character to the right 

¿Es el comportamiento esperado?

+2

Esta es de hecho una excelente pregunta acerca de cómo funciona vim. – Benoit

+1

Ahora que lo mencionas, sí, es inconsistente. Si habilita la numeración relativa en 7.3+ (que recomiendo encarecidamente), puede ver que la línea actual es 0 y las líneas después/anterior están comenzando con 1. –

Respuesta

11

Cuando comienza un movimiento y se encuentra en el modo pendiente de operador, su movimiento será inclusivo o exclusivo, y ya sea de forma o en línea (los movimientos lineales siempre incluyen).

j es un movimiento inclusivo en línea. Probablemente quiera probar dvj o dgj (este último funciona con líneas de pantalla).

Ver :help operator. Puede forzar movimientos en línea, en caracteres o en bloque con V, v o CTRL-V respectivamente.

+0

¡No lo sabía! Un gran consejo :) – rossipedia

2

Es en realidad no inconsistente. Supongo que estás buscando

  • borrar una línea: dd (que es un comando )
  • borrar una línea abajo: dj (o corto dj). Esta es un operador con un movimiento)

Los bits restantes sorprendentes se deben a la noción de vim de linewise, en forma de bloques y characterwise movimientos, que en realidad sólo son abstracciones para permitir que Vim hacer lo correcto o Haga lo que espera cuando opera en las selecciones.


Como @Benoit Dicho esto, es d operador que lleva a un movimiento.

2j en línea, va a mover dos líneas hacia abajo, cubriendo 3 líneas.

Nota cómo, si quieres disponer de pistas visuales con eso, se puede establecer la opción rn

:se relativenumber 

Esto hará que linenumbering relativa que se muestra en la izquierda 'saco' del editor. Estos números pueden usarse como 'direcciones' y hacer lo que esperas cuando haces 'd12j' o 'd12k'

Te recomiendo que te familiarices con los movimientos text object antes de acostumbrarte a esto, por cierto. Muchas veces, los objetos de texto son mucho más precisos (y suelen funcionar en modo de caracteres, solo se degradan a selecciones lineales en condiciones apropiadas)

Cuestiones relacionadas