2011-08-19 66 views
15

我有一堆sass文件,而且我的設計器使用了錯誤的語法。我想:margin-top 1px但他確實margin-top: 1pxVIM,在多個文件上運行命令

所以我很容易寫了一個子命令:

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

使作品和修復所有的冒號和我想的地方移動它們。我在stylesheets目錄中有大約50個sass文件。我怎樣才能在一個鏡頭中對所有文件運行這個命令?我不確定如何在vim中解決這個問題。可能與grep有關?我無法告訴你。

回答

22

看到這個:http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo

我現在學會了這個命令,但幫助是顯而易見的。

轉到爲:

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

+1'argdo','bufdo'太一般了。如果您不想更改全局參數列表,您還可以使用':argl'在窗口的本地創建一個參數列表。 –

+2

我發現這篇文章對這個問題非常有幫助:http://www.ibrahim-ahmed.com/2008/01/find-and-replace-in-multiple-files-in.html – webdesserts

6

下面是一個例子

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

只是改變你的正則表達式來滿足您的需求

+0

更多信息':幫助bufdo' –

2

幾個步驟。

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

這將把所有的匹配到你的quickfix列表。

然後一個宏來做你想做的事情。

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

然後測試該宏幾次(與@a)。 然後另一個宏一遍一遍運行該宏...

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

我認爲這種情況下,最好的工具是sed,流編輯器。

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

這將編輯所有的.css文件離開原有的與.old爲擴展。

sed使用的一組正則表達式有點不同,並且取決於您的版本或多或少有限。我使用的表達式顯然適用於您的案例 - 使用BSD工具。