2011-08-19 5 views
15

Mam kilka plików sass i mój projektant użył niewłaściwej składni. Chciałem :margin-top 1px ale zrobił margin-top: 1pxVIM, Uruchom polecenie na wielu plikach

Więc łatwo napisał sub polecenie:

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

Więc to działa i naprawia wszystkie dwukropki i przenosi je w miejscu chcę. Mam około 50 plików sass w katalogu stylesheets. Jak mogę uruchomić to polecenie dla wszystkich moich plików za jednym razem? Nie jestem pewien, jak to zrobić w vim. Może ma to coś wspólnego z grep? Nie mogłem ci powiedzieć.

Odpowiedz

22

Zobacz to: http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo

Nauczyłem się tego polecenia w tej chwili, ale pomoc jest jasne.

Przejdź do:

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

+1 dla' argdo', 'bufdo' jest zbyt ogólne. Możesz także utworzyć listę argumentów lokalną dla okna z ': argl', jeśli nie chcesz zmieniać swojej globalnej listy arg. –

+2

Znalazłem ten artykuł na ten temat, aby być bardzo pomocne: http://www.ibrahim-ahmed.com/2008/01/find-and-replace-in-multiple-files-in.html – webdesserts

6

Oto przykład

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

prostu zmienić regex do swoich potrzeb

+0

więcej informacji ': pomoc bufdo' –

2

Kilka kroków.

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

Spowoduje to umieszczenie wszystkich dopasowań na liście poprawek.

Następnie makro, aby zrobić to, co chcesz zrobić.

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

Następnie sprawdzić, makro kilka razy (z @a). Potem jeszcze makro do uruchomienia tego makra w kółko ...

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

Myślę, że najlepszym narzędziem do tego przypadku jest sed edytor strumieniowy.

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

To będzie edytować wszystkie .css pliki pozostawiając oryginalne z .old rozszerzeń.

Zestaw wyrażeń regularnych używanych przez sed jest nieco inny iw zależności od wersji mniej lub bardziej ograniczony. Wyrażenie, którego użyłem najwyraźniej działa dobrze dla twojego przypadku - z narzędziem BSD.