Learn Vim 第二十一章:多文件操作

2026-05-13

Eric Wong

本文翻译自 iggredible/Learn-Vim,部分内容有增改。

多文件编辑更新是一个值得掌握、非常有用的编辑工具。本章,您将学到如何在Vim中进行多文件编辑的更多不同方法。

在多个文件中执行命令的几种方法

要在多个文件中执行命令,Vim有8种方法:

  • 参数列表 (argdo)
  • 缓冲区列表 (bufdo)
  • 窗口列表 (windo)
  • tab 列表(tabdo)
  • 快速修复列表 (cdo)
  • 文件方式的快速修复列表 (cfdo)
  • 位置列表 (ldo)
  • 文件方式的位置列表 (lfdo)

实际上,大部分时间您可能只会用到1种或2种。它们的运行方式都大体相同:分别创建一个列表,然后向列表传递一个您想执行的命令。

参数列表

:args file1 file2 file3
:args *.js
:args **/*.js

遍历:

  • :first 跳至第一个文件
  • :last 跳到最后一个文件
  • :next / :prev 向前/向后移动

在所有匹配文件中执行替换:

:args **/*.yml
:argdo %s/donut/pancake/g | update

使用 :arga 添加文件到现有列表(不会覆盖)。

缓冲区列表

:buffers          " 显示缓冲区列表
:bufdo %s/donut/pancake/g | update

窗口列表和选项卡列表

:windo <command>    " 在每个窗口执行
:tabdo <command>    " 在每个选项卡执行

快速修复列表

:vimgrep /donut/ **/*.js
:copen              " 打开快速修复窗口
:cclose             " 关闭
:cnext / :cprev     " 遍历

cdo 和 cfdo 的区别:

  • cdo 在修复列表中的每一个 元素 上执行命令。
  • cfdo 在修复列表中的每一个 文件 上执行命令。

如果命令作用域是整个文件(如 :%s),使用 cfdo。如果命令作用域是某一行(如 :s),使用 cdo。

位置列表

位置列表和快速修复列表很像,区别在于:任何时候都只能有1个快速修复列表,而位置列表每个窗口可以有一个。

:lvimgrep /bagel/ **/*.md
:lopen

:ldo 对位置列表中每一个元素执行命令,:lfdo 对位置列表中每一个文件执行命令。

在Vim中运行多文件操作命令

当您需要在多个文件中改变一个变量名字的时候,您肯定想一个操作就全部搞定。建议从参数列表 :argdo 开始并掌握它,然后再学下一个。

版权声明:本文为原创文章,遵循 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)版权协议,转载请附上原文出处链接和本声明。

分享到:

评论