10

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

vim `cat list.txt`

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

:99,104 norm i#

(从第 99 行到第 104 行,插入注释“#”)<--简单,有效

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

有什么建议么?

4

3 回答 3

14

如果您之前有(允许更改缓冲区而不保存) ,我想bufdo会起作用:set hiddenbufdo

:set hidden
:bufdo 99,104 norm i#

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

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

于 2013-01-02T18:36:14.340 回答
3

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

sed -i '99,104s/^/#/' list of files 
于 2013-01-02T18:39:14.823 回答
2

因为您提供了所有文件作为参数,:argdo所以是正确的命令。(除非您打开其他文件,否则也可以:bufdo。)如果您不想:set hidden(如另一个答案中所示),您必须立即通过:update. 因为您使用的是:normal命令,所以必须将其括起来:execute才能连接另一个 Ex 命令:

:argdo 99,104 execute 'norm i#' | update
于 2013-01-03T01:07:20.000 回答