在所有打开的文件上使用VIM命令

时间:2013-01-02 18:33:27

标签: bash vim vi

我有一个使用此命令在VIM中打开的文件列表:

vim `cat list.txt`

我想在所有打开的文件上运行此命令:

:99,104 norm i#

(从第99到104行,插入注释“#”)< - simple,works

当我运行上面的命令进行插入时,它在当前文件中按预期工作。如何让VIM在所有打开的文件上运行完全相同的命令?我尝试了:argdo:windo:bufdo,但没有任何运气。

有什么建议吗?

3 个答案:

答案 0 :(得分:11)

我猜bufdo可行,如果你有set hidden(允许bufdo更改缓冲区而不保存):

:set hidden
:bufdo 99,104 norm i#

然后使用:bufdo! w:wa保存所有文件。

(注意:set hidden也可以替换为set autowrite。)

答案 1 :(得分:3)

如果您能使用它,我认为sed将是更好的选择。 sed是一个命令行编辑器,而不是像vim这样的交互式编辑器。

sed -i '99,104s/^/#/' list of files 

答案 2 :(得分:1)

因为您已将所有文件作为参数提供,所以:argdo是正确的命令。 (除非你打开其他文件,:bufdo也可以。)如果你不想:set hidden(如另一个答案中所示),你必须立即通过{{1}保持缓冲区}}。因为您使用的是:update命令,所以必须将其括在:normal中才能连接另一个Ex命令:

:execute