我有一个文件列表,是通过以下命令在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会是更好的选择。与vim这样的交互式编辑器不同,sed是一个命令行编辑器。
sed -i '99,104s/^/#/' list of files
sed
是一个流编辑器。如果你想要一个可以从脚本或命令行驱动的(真正的)文本编辑器,那么有 ed
和 ex
。 - gniourf_gniourf:argdo
是正确的命令。(除非您打开其他文件,否则也可以使用:bufdo
。)如果您不想:set hidden
(如其他回答所示),则必须立即通过:update
持久化该缓冲区。由于您正在使用:normal
命令,因此必须将其包含在:execute
中,以便能够连接另一个Ex命令::argdo 99,104 execute 'norm i#' | update