Vim: forma más rápida de seleccionar bloques de texto en modo visual

190

He estado usando vim durante bastante tiempo y soy consciente de que seleccionar bloques de texto en modo visual es tan simple como SHIFT+ Vy mover la tecla de flecha hacia arriba o hacia abajo línea por línea hasta llegar al final del bloque de texto que quiere seleccionado.

Mi pregunta es: ¿hay una forma más rápida en modo visual de seleccionar un bloque de texto, por ejemplo, con SHIFT+ Vseguido de especificar el número de línea en el que quiero que se detenga la selección? (a través de, :35por ejemplo, donde 35 es el número de línea que quiero seleccionar, esto obviamente no funciona, así que mi pregunta es averiguar cómo se puede hacer algo similar a esto ...)

Calvin Cheng
fuente
3
+1 Buena pregunta ya que me he encontrado haciendo algo como esto a menudo. Me pregunto si tal vez este no es el lugar empezar a utilizar el uso v%o v/patterno alguna otra cosa?
user786653
9
vip seleccionar párrafo interno vis seleccionar oración interna.
SergioAraujo
27
V35Gseleccionará visualmente de la línea actual a la línea 35, también V10jo V10kseleccionará visualmente las 10 líneas siguientes o anteriores
Stephan
1
@Stephan, eso es justo lo que estaba buscando. ¡¡Gracias!!
chilla
para la línea de selección de uso I atajo: nnoremap <Space> V. Cuando esté en modo de línea visual, simplemente haga clic con el botón derecho del mouse para definir la selección (al menos en Linux es así). De todos modos, más efectivo que solo con teclado.
Mikhail V

Respuestas:

212

Además de lo que otros han dicho, también puede ampliar su selección mediante búsquedas de patrones.

Por ejemplo, v/fooseleccionará desde su posición actual hasta la próxima instancia de "foo". Si realmente desea expandirse a la siguiente instancia de "foo", en la línea 35, por ejemplo, simplemente presione npara expandir la selección a la siguiente instancia, y así sucesivamente.

actualizar

No lo hago a menudo, pero sé que algunas personas usan marcas extensivamente para hacer selecciones visuales. Por ejemplo, si estoy en la línea 5 y quiero seleccionar la línea 35, podría presionar mapara colocar la marca aen la línea 5, luego :35moverme a la línea 35. Shift+ vpara ingresar al modo visual en línea y, finalmente, `avolver a seleccionar para marcar a.

Arrendajo
fuente
21
Si necesita incluir el patrón que puede usar v/foo/e. Los esignifica "fin" del patrón coincidente.
Peter Rincker
66
Y puede modificar desde esa línea con desplazamientos: V / foo / + 5 o V / foo / -5 (estoy usando el modo visual lineal como el autor).
bheeshmar
¿Qué haría si quisiera seleccionar el rango de texto que coincide con su búsqueda? es decir: encontrar y seleccionar (palabra completa) su término de búsqueda?
Daniel Park
55
@DanielPark Para seleccionar la palabra actual, use v i w. Si desea seleccionar el espacio no en blanco contiguo actual, use v i Shift+ w. La diferencia sería cuando el cursor está aquí MyCla|ss.Method, el primer combo seleccionaría MyClassy el segundo seleccionaría todo.
Jay
1
Gracias. Descubrió que el uso también le v i w spermite realizar efectivamente una operación de "reemplazo".
Daniel Park
113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G logra lo que quieres

Bheeshmar
fuente
89

Vim es un lenguaje. Para entender realmente a Vim, debes conocer el idioma. Muchos comandos son verbos, y vim también tiene objetos y preposiciones.

V100G
V100gg

Esto significa "seleccionar la línea actual hasta la línea 100 incluida".

Los objetos de texto son donde está gran parte del poder. Introducen más objetos con preposiciones.

Vap

Esto significa "seleccionar alrededor del párrafo actual", es decir, seleccionar el párrafo actual y la línea en blanco que lo sigue.

V2ap

Esto significa "seleccionar alrededor del párrafo actual y el siguiente párrafo".

}V-2ap

Esto significa "ir al final del párrafo actual y luego seleccionarlo visualmente y el párrafo anterior".

Entender Vim como un idioma lo ayudará a obtener el mejor rendimiento.

Después de seleccionar hacia abajo, puede combinar con otros comandos:

Vapd

Con el comando anterior, puede seleccionar alrededor de un párrafo y eliminarlo. Cambie da ypara copiar o cpara cambiar o ppara pegar.

Una vez que comprenda cómo funcionan todos estos comandos juntos, eventualmente no necesitará seleccionar nada visualmente. En lugar de seleccionar visualmente y luego eliminar un párrafo, puede eliminar el párrafo con el dapcomando.

kzh
fuente
} V-2ap El uso de -2 es realmente inteligente.
Ambareesh
40

v35G seleccionará todo, desde el cursor hasta la línea 35.

vlo pone en modo de selección, 35especifica el número de línea al que desea Gir.

También puede usar v}cual seleccionará todo hasta el comienzo del siguiente párrafo.

michaelmichael
fuente
16

Para seleccionar el número de líneas:

shift + v 9j - selecciona 10 líneas

mateusz.fiolka
fuente
2
Para rangos pequeños, esto es bueno, especialmente cuando se combina con:set rnu
Peter Rincker
9

Shift+V n j o Shift+V n k

Esto selecciona la línea actual y las nlíneas siguiente / anterior . Me resulta muy útil.

Peng Zhang
fuente
Esta es una manera simple que estaba buscando. Gracias
Arsal
6

v 35 j

texto agregado para un mínimo de 30 caracteres

µBio
fuente
6

v%

seleccionará todo el bloque.

Juega también con:

v}, vp, vs, Etc.

Ver ayuda:

:help text-objects

que enumera las diferentes formas de seleccionar letras, palabras, oraciones, párrafos, bloques, etc.

bjfletcher
fuente
4

Puede presionar vi}para seleccionar el bloque rodeado de {}corchetes donde se encuentra actualmente el cursor.

Realmente no importa dónde se encuentre dentro de ese bloque (solo asegúrese de estar en el más externo). También puede cambiar {a cualquier cosa que tenga un par como )o ].

iggy
fuente
3

Siempre puede usar números antecedentes para repetir acciones:

  • En modo visual, escriba 35y el cursor se moverá hacia abajo 35 veces, seleccionando las siguientes 35 líneas
  • En modo normal:
    • eliminar 35 líneas 35dd
    • pegar 35 veces 35p
    • deshacer 35 cambios 35u
    • etc.
Jackson
fuente
3

simple solo presione Shift v line number gg

ejemplo: su línea actual a la línea 41 Simplemente presione Shift v 41 gg

ReyApr
fuente
1

} significa mover el cursor al siguiente párrafo. entonces, use v}para seleccionar el párrafo completo.

mabeiyi
fuente
0

Para seleccionar todo en visual: escriba Esc para asegurarse de que está en modo normal

:0 

escriba ENTER para ir al comienzo del archivo

vG
Sergio Abreu
fuente
Puede usar ggen modo normal para ir a la primera línea también.
huangzonghao
0

Podría ser útil saber:

Para seleccionar la misma cantidad de líneas, por ejemplo, use 1v Debe haber realizado alguna modificación para poder usar 1v, en bloque o en línea.

Hoy vi este increíble consejo desde aquí :

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

También puede restablecer los límites del bloque visual al hacerlo:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point
SergioAraujo
fuente
0

Lo uso con pliegue en modo sangría:

v abrir el modo Visual en cualquier parte del bloque

zaza tooglelo dos veces

yoann guillard
fuente