我有一个使用此命令在 VIM 中打开的文件列表:
vim `cat list.txt`
我希望在所有打开的文件上运行此命令:
:99,104 norm i#
(从第 99 行到第 104 行,插入注释“#”)<--简单,有效
当我运行上述命令插入时,它在当前文件上按预期工作。如何让 VIM 在所有打开的文件上运行完全相同的命令?我试过了:argdo
,:windo
但:bufdo
没有任何运气。
有什么建议么?
如果您之前有(允许更改缓冲区而不保存) ,我想bufdo
会起作用:set hidden
bufdo
:set hidden
:bufdo 99,104 norm i#
:bufdo! w
然后用或保存所有文件:wa
。
(注:set hidden
也可以替换set autowrite
为。)
如果您可以使用它,我认为 sed 将是一个更好的选择。sed 是一个命令行编辑器,而不是像 vim 这样的交互式编辑器。
sed -i '99,104s/^/#/' list of files
因为您提供了所有文件作为参数,:argdo
所以是正确的命令。(除非您打开其他文件,否则也可以:bufdo
。)如果您不想:set hidden
(如另一个答案中所示),您必须立即通过:update
. 因为您使用的是:normal
命令,所以必须将其括起来:execute
才能连接另一个 Ex 命令:
:argdo 99,104 execute 'norm i#' | update