vim: use una cadena de búsqueda en el comando reemplazar

16

A menudo uso el /comando de búsqueda vim para verificar mis expresiones regulares (solo para ver qué coincide). Después de eso, generalmente uso el :%scomando replace, donde uso esa expresión regular de la búsqueda como una cadena para ser reemplazada, por ejemplo, primero busco dicha cadena:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Se ajusta exactamente a lo que quiero, así que hago mi reemplazo:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Pero tengo que volver a escribir toda la expresión regular aquí. Por lo general, esa expresión regular es mucho más larga, por eso estoy buscando una solución:

¿Existe algún acceso directo o script vim para pegar ese patrón de búsqueda directamente en el comando de reemplazo?

Yo uso vim en la terminal (no gvim).

kars7e
fuente

Respuestas:

20

En general, una expresión regular vacía significa usar la expresión regular ingresada previamente, por :%s//\1/glo que debe hacer lo que desee.

geekosaur
fuente
Woah, es así de fácil! Exactamente lo que necesitaba, gracias.
kars7e
10
Además, si desea verificar o modificar el último patrón utilizado, puede usar Control-r continuación, /insertar el contenido del registro de patrón de búsqueda ( /) directamente en una línea de comandos parcialmente tecleado (por ejemplo, justo después :%s/).
Chris Johnsen
Esa es una pista muy útil también. Gracias @Chris! +1
kars7e
¿Qué sucede si quiero seguir "\ 1" con un número como digamos 23? ¿Cómo evito que se interprete como "\ 123"?
Campeón
@Champ Como las referencias anteriores solo van hasta \9, no hay ambigüedad.
Kusalananda
4

Otra buena manera de ver búsquedas de expresiones regulares pasadas, así como comandos Ex y hacer cambios en ellas es editar estos comandos en modo normal. Desde este modo, tendrá todos sus poderes vim, incluidos copiar y pegar.

  • Búsqueda: en lugar de ?o /para buscar, intente q/oq?
  • para comandos Ex, en lugar de :intentarq:
  • para salir de este modo usa CtrlC

Para leer más ver :help q:.

Ryan Carney
fuente