2011-08-19 18 views
15

Tengo un montón de archivos sass y mi diseñador usó la sintaxis incorrecta. Quería :margin-top 1px pero lo hizo margin-top: 1pxVIM, ejecuta un comando en varios archivos

Así que escribí un comando fácilmente substitución:

:rubydo sub! /([\w-]+):/,':\1' 

Para que trabaja y corrige todos los signos de dos puntos y los mueve en el lugar que quiero. Tengo alrededor de 50 archivos sass en un directorio stylesheets. ¿Cómo puedo ejecutar este comando en todos mis archivos de una vez? No estoy muy seguro de cómo hacerlo en vim. ¿Tal vez algo que ver con grep? No podría decírtelo.

Respuesta

22

ver esto: http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo

aprendí este comando en este momento, pero la ayuda es clara.

Ir a:

:args *.css 
:argdo %s/\([[:alpha:]-]\+\):/:\1/ge | update 
+0

1 para' argdo', 'bufdo' es demasiado general. También puede crear una lista de argumentos local en la ventana con ': argl' si no desea cambiar su lista global de argumentos. –

+2

Encontré este artículo sobre este tema para ser muy útil: http://www.ibrahim-ahmed.com/2008/01/find-and-replace-in-multiple-files-in.html – webdesserts

6

Aquí es un ejemplo

:bufdo %s/oldStuff/newStuff/ge | update 

acaba de cambiar su expresión regular para satisfacer sus necesidades

+0

más información ': ayudar bufdo' –

2

Un par de pasos.

:vimgrep /^[^:]\w+/ %:p:h/* " find all of the lines that don't start with a colon 

Esto colocará todas las coincidencias en su lista de revisiones rápidas.

A continuación, una macro para hacer lo que desea hacer.

qa 
I:<esc> 
f:x 
:w|cn<enter> 
q 

Entonces prueba que macro un par de veces (con @a). Luego otra macro para ejecutar esa macro una y otra vez ...

qbq " this clears out b before starting, very important! 
[email protected]@bq 
@b " watch in amazement. :) 
5

creo que la mejor herramienta para este caso es sed, el editor de flujo.

sed -i.old 's/:\([-a-z]*\)/\1:/' *.css 

Esto editar todos sus archivos Css dejando los originales con los old extensiones.

El conjunto de expresiones regulares utilizado por sed es un poco diferente, y depende de su versión más o menos limitada. La expresión que usé aparentemente funciona bien para su caso, con la herramienta BSD.

Cuestiones relacionadas