我有一个使用此命令在VIM中打开的文件列表:
vim `cat list.txt`
我想在所有打开的文件上运行此命令:
:99,104 norm i#
(从第99到104行,插入注释“#”)< - simple,works
当我运行上面的命令进行插入时,它在当前文件中按预期工作。如何让VIM在所有打开的文件上运行完全相同的命令?我尝试了:argdo
,:windo
,:bufdo
,但没有任何运气。
有什么建议吗?
答案 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