¿Cómo se reutiliza una selección de modo visual?

164

A menudo, al editar el código, seleccionaré un bloque en modo visual y haré una búsqueda y reemplazo sobre el bloque. Después de hacer los cambios, sin embargo, deja el modo visual. ¿Cómo se realiza una nueva búsqueda y reemplazo en la misma selección?

laberinto
fuente
Bueno, encontré una forma, pero es un poco engorroso:: '<,'> s / old / new / g ¿Alguna forma de hacer esto sin tener que escribir '<,'>?
laberinto

Respuestas:

244

Puede volver a seleccionar la última área visual seleccionada con gv.

Heptita
fuente
44
¡Increíble! @Heptite, ¿cómo puedo encontrar este comando por mí mismo sin Stackoverflow?
skywinder
66
@skywinder: help gv
Heptite
44
@Heptite: no estoy seguro de si estás siendo una mejilla aquí, pero ese comando te muestra lo que: gv hace una vez que lo sabes. ¿Pero y si no lo hiciera ? Enseñe a un hombre (wo) a pescar y todo eso.
Ben Thul
@BenThul: Creo que entendí mal la pregunta. Conozco muchas de las características de Vim simplemente leyendo la mayor parte de la documentación a lo largo del tiempo, comenzando con " :help".
Heptita
2
:help select-visualdebería llevarlo al manual correcto dentro de vim @skywinder.
14

gv es definitivamente el método más rápido (use la última selección), pero si desea una región de selección guardada estable (o varias), siempre puede crear macros.

Digamos que quiero almacenar una selección de mi método actual, que va de las líneas 25-35. Puedo crear una macro que seleccione todo el método escribiendo

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Entonces puedo recuperar esa selección escribiendo @a(ejecutar macro en el registro a). Repita con cualquier registro, líneas o secciones de líneas que desee. Obviamente, si realiza cambios en el archivo, la selección también puede cambiar, por lo que puede considerar usar marcas en lugar de números de línea "codificados".

AlexMA
fuente
zmpara ingresar que necesita saber los números de línea. Creo que es mejor definir dos marcas y luego usar: 'a, b para operar en el rango entre ellas (o reemplazar' con puntos de retroceso si se quiere granularidad dentro de una línea)
sillyMunky
Sí, la cuestión de los números de línea era tonta, solo la usé como un ejemplo de cómo crear una macro de selección. Sin embargo, usar una gama de marcas es una idea interesante ...
AlexMA
6

gvFunciona muy bien para recuperar la última selección. Pero a veces uno necesita un poco más.

Si alguna vez necesitó un registro más persistente, eche un vistazo a este complemento en el que estamos trabajando actualmente en GitHub.

VisualMarks le permite guardar y restaurar áreas visualmente seleccionadas al igual que guarda y marca ubicaciones específicas en sus archivos m. Después de la instalación y con las opciones predeterminadas, use:

ma

en modo visual para guardar su selección actual para marcar a, luego

<a

en modo normal para volver a esta selección.

iago-lito
fuente
Wow, eso suena realmente genial. ¡Tendré que probar ese complemento! Por cierto, ¿pueden estos VisualMarks persistir con mkview como puede hacerlo con las marcas?
laberinto
@labyrinth No lo sé mkviewpero ... supongo que sí, ya que las marcas se guardan en un archivo separado y ... Sugiero que lo intentes de todos modos :) Si no persisten como deseas, estaremos encantados de recibir tu función solicite en GitHub e intente procesarlo.
iago-lito
1

Supongamos que quiero reemplazar Goodbye con Hello y se seleccionó el siguiente código:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Me gustaría escribir :s/Goodbye/Hello/y Vim reemplazar todas las instancias de GoodbyelaHello

Es simplemente una combinación de las expresiones regulares de vim y las selecciones de modo visual. Cuando selecciona, debe rellenarse automáticamente'<,'>

Scott Nguyen
fuente
1
Lo siento, eso no es lo que estaba preguntando. Lo que pregunto es ¿cómo reutiliza la selección para hacer otra búsqueda y reemplazo en el mismo rango que el seleccionado anteriormente?
laberinto
1
Después de reemplazarlo, saldrá del modo visual. escriba gvy su modo visual volverá al estado de selección anterior.
Scott Nguyen