2010-10-13 7 views
22

Deseo utilizar el contenido de un registro como patrón de búsqueda en Vim.Utilizar un valor de registro como patrón de búsqueda

Me gustaría hacer esto desde la línea de comandos, así que no puedo usar la sintaxis <c-r>, ya que supone una sesión interactiva.

Es posible utilizar un registro como reemplazar patrón, como este

:%s/foo/\[email protected]/g 

Sin embargo, con esta sintaxis como patrón de búsqueda no funciona

:%s/\[email protected]/foo/g 

emite

E64: \= follows nothing 
E476: Invalid command 
+0

Pero la mayoría de las personas que vienen aquí probablemente estén buscando '': [preguntas relevantes + respuestas] (https://stackoverflow.com/q/101258/1143274). –

Respuesta

11

no creo que es posible directamente, pero se puede utilizar :exe para lograrlo:

:exe '%s/' . @a . '/foo/g' 
+0

Prefiero esta respuesta ya que puedo pasar múltiples variables al script. A modo de ejemplo, necesito determinar el rango de búsqueda por dos variables. Puedo hacerlo usando esto: ': exe '/ ^'. @un . '/,/^'. @b. '/ s /'. @c. '/'. @d. '/ g''. – lerner

11

En un patrón (no la pieza de repuesto), \= es sinónimo de “0 o 1 vez” (que es un sinónimo para \? poner debe ser preferible a \? ya que este último significa literal ? mirando hacia atrás.

Ver :help /\= y help pattern para más detalles.

Por qué no:

let @/[email protected] 
%s//foo/g 
+0

Acepté la respuesta de Al, ya que también funciona para otros comandos como '' vimgrep'' (que también quería controlar). – pkit

+1

No hay problema. No se disculpe cuando seleccione una respuesta, sabemos que solo puede seleccionar una. – Benoit

10

Usted puede hacer esto con el registro /

Esto no resuelve el problema general, pero me parece que el registro / es especial en este sentido: si deja el término de búsqueda en blanco, usará lo que esté en el registro /; es decir, cualquier cosa que buscó al último.

lo tanto, si desea reemplazar foo con el contenido de @a, usted puede hacer esto:

  1. Buscar foo
  2. %s//\[email protected]/g (o resaltar algún texto y comience a escribir :s sustituir sólo en ese rango)
Cuestiones relacionadas