Mover el cursor x líneas desde la posición actual en vi / vim

80

¿Hay alguna forma de mover el cursor una cantidad relativa de líneas en vi / vim? Digamos que tiene el cursor 10 líneas debajo de un bloque de código que desea eliminar. Si tiene los números de línea mostrados en orden relativo, sería bueno tener un "comando saltar 10 líneas hacia arriba" que lo lleve allí.

¿O tal vez es mejor mostrar los números de línea absolutos e ir xgg donde x es el número de línea?

Eric Leschinski
fuente
Si usted tiene que repetir varias veces: superuser.com/questions/429917/...
toliveira

Respuestas:

122

Sí, por supuesto que hay una manera. jy kmoverse hacia abajo y hacia arriba una línea, entonces 10jy 10kmoverse hacia abajo y hacia arriba diez líneas. Puede repetir cualquier movimiento poniendo un número antes.

Es posible que también desee hacerlo set relativenumbersi esto es algo que hace mucho; lo ayudará a ahorrar contando al imprimir números de línea en relación con la línea actual, en lugar de números absolutos.

Cascabel
fuente
¡Gracias! Debería haberme dado cuenta de que el recuento también se aplicaría a los comandos de movimiento. ¡Me has alegrado el día!
1
Desde Vim 7.4 es posible ver números de línea relativos y absolutos al mismo tiempo agregando lo siguiente a .vimrc set relativenumbery set number. Esto le dará números de línea relativos con un número de línea absoluto para la línea en la que se encuentra el cursor.
Isaac Gregson
2
También puede bajar varias líneas simplemente escribiendo el número seguido de enter(para números de línea absolutos, simplemente preceda con dos puntos). Si estás acostumbrado a jy ky un diseño de teclado normal, que no puede ser demasiado útil, pero como usuario Colemak flecha utilizando, enteres más fácil de alcanzar que la Colemak j(QWERTY yclave)
SnoringFrog
49

Es posible que mover 10 líneas hacia arriba y hacia abajo no se adapte a su tarea ni a otras opciones. Considere otros movimientos:

Ctrlf, Ctrlbavance y retroceso de la página.

}, {avance y retroceda un párrafo.

Puede escribir reglas en su vimrc para enlazar 10ja una clave, digamos Jpara bajar 10 líneas agregando la siguiente línea a su archivo vimrc: map <S-j> 10j

Sin embargo, estaría sobrescribiendo el útil Jcomando existente (unir dos líneas). Encontrar una combinación de teclas sin usar bien posicionada para 10j/ 10kpodría ser difícil, por lo que sugiero usar los movimientos existentes que mencioné.

También es posible que desee saber que puede retroceder a una palabra que ve haciendo: ?somewordy avanzar a una palabra que ve haciendo /someword. Estos serán más rápidos que intentar subir / bajar 10 líneas y luego reposicionar el cursor en la ubicación exacta. Si no puede pensar en una cadena de búsqueda simple para la línea en cuestión, siempre puede ir al número de línea como dijo ( xgg).

Olhovsky
fuente
¡Avanzar y retroceder página logró lo que estaba buscando!
jeremyjjbrown
1
Utilizo ctrl-f y ctrl-b todo el tiempo, pero pasé por alto {,} que son quizás la mejor granularidad para editar código. ¡Gracias!
Thomson Comer
Saber exactamente cuántas líneas hay que mover es casi imposible. {y} son mi opción preferida.
Andrejs
12

Estaba jugando con vim y noté que -te mueve hacia arriba y +te mueve hacia abajo, para que puedas:

10-

o se puede utilizar kya que usted está probablemente más utilizada para hjk lel movimiento del cursor.

Cilan
fuente
3
Para avanzar, enterfunciona igual que +después de un número y es más fácil de alcanzar la mayor parte del tiempo
SnoringFrog
@SnoringFrog Sí, pero esto es solo para que pueda haber alguna relación entre arriba y abajo; No me refiero a que nadie se mueva hacia arriba y hacia abajo de esta manera, porque hjkl sería el más rápido de todos modos.
Cilan