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)版权协议,转载请附上原文出处链接和本声明。
分享到: