VIM,对多个文件运行命令

时间:2011-08-19 20:02:18

标签: vim batch-file substitution

我有一堆sass文件,而我的设计师使用了错误的语法。我想要:margin-top 1px,但他做了margin-top: 1px

所以我轻松写了一个子命令:

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

这样可以工作并修复所有冒号并将它们移动到我想要的位置。我在stylesheets目录中有大约50个sass文件。如何一次性对所有文件运行此命令?我不确定如何在vim中解决这个问题。也许与grep有关?我不能告诉你。

4 个答案:

答案 0 :(得分:24)

请参阅:http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo

我现在学会了这个命令,但帮助很明确。

Go for:

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

答案 1 :(得分:6)

这是一个例子

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

只需更改正则表达式即可满足您的需求

答案 2 :(得分:5)

我认为这种情况的最佳工具是sed,即流编辑器。

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

这将编辑所有 .css 文件,而原始文件则包含 .old 扩展名。

sed使用的正则表达式集有点不同,并且取决于您的版本或多或少的限制。我使用的表达式显然适用于您的情况 - 使用BSD工具。

答案 3 :(得分: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!
qb@a@bq
@b    " watch in amazement.  :)