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

10

我有一个文件列表,是通过以下命令在VIM中打开的:

vim `cat list.txt`

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

:99,104 norm i#

(从第99到104行插入注释“#”)<--简单易用

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

有什么建议吗?

3个回答

14

我想如果你在使用 bufdo 命令之前设置了 set hidden (允许 bufdo 在不保存的情况下更改缓冲区),它应该可以起作用:

:set hidden
:bufdo 99,104 norm i#

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

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


谢谢,我忘了“:set hidden”。干杯。 - Mike J

3

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

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

1
sed 是一个流编辑器。如果你想要一个可以从脚本或命令行驱动的(真正的)文本编辑器,那么有 edex - gniourf_gniourf

2
由于您已经将所有文件作为参数提供,因此:argdo是正确的命令。(除非您打开其他文件,否则也可以使用:bufdo。)如果您不想:set hidden(如其他回答所示),则必须立即通过:update持久化该缓冲区。由于您正在使用:normal命令,因此必须将其包含在:execute中,以便能够连接另一个Ex命令:
:argdo 99,104 execute 'norm i#' | update

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接