tutorial - VIM, ejecuta un comando en varios archivos
vi linux (4)
Aquí hay un ejemplo
:bufdo %s/oldStuff/newStuff/ge | update
solo cambia tu expresión regular para satisfacer tus necesidades
Tengo un montón de archivos sass y mi diseñador usó la sintaxis incorrecta. Quería :margin-top 1px
pero hizo margin-top: 1px
Así que fácilmente escribí un sub comando:
:rubydo sub! /([/w-]+):/,'':/1''
Así que eso funciona y arregla todos los dos puntos y los mueve en el lugar que quiero. Tengo unos 50 archivos sass en un directorio de stylesheets
. ¿Cómo puedo ejecutar este comando en todos mis archivos de una sola vez? No estoy muy seguro de cómo hacer esto en vim
. Tal vez algo que ver con grep
? No pude decirte
Creo que la mejor herramienta para este caso es sed, el editor de secuencias.
sed -i.old ''s/:/([-a-z]*/)//1:/'' *.css
Esto editará todos sus archivos .css dejando los originales con las extensiones .old .
El conjunto de expresiones regulares utilizadas por sed es un poco diferente, y dependiendo de su versión más o menos limitada. La expresión que utilicé aparentemente funciona bien para su caso, con la herramienta BSD.
Un par de pasos.
:vimgrep /^[^:]/w+/ %:p:h/* " find all of the lines that don''t start with a colon
Esto pondrá todas las coincidencias en su lista de soluciones rápidas.
Luego una macro para hacer lo que quieras hacer.
qa
I:<esc>
f:x
:w|cn<enter>
q
Luego prueba esa macro unas cuantas veces (con @a
). Luego otra macro para ejecutar esa macro una y otra vez ...
qbq " this clears out b before starting, very important!
qb@a@bq
@b " watch in amazement. :)
Vea esto: http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo
Aprendí este comando ahora mismo, pero la ayuda es clara.
Ir por:
:args *.css
:argdo %s//([[:alpha:]-]/+/):/:/1/ge | update