如何在Vim中无需插件实现多文件指定字符串的全局查找替换
Vim 无插件多文件指定字符串全量替换操作指南
方法一:通过 :arg 系列命令实现
适合提前确定要操作的文件范围的场景:
- 第一步:将目标文件加入Vim参数列表
按自己的需求修改文件匹配规则,示例是匹配当前项目src目录下所有.js后缀的文件(含所有子目录)::args src/**/*.js
若只需要匹配当前目录下的.md文件,可修改为::args *.md - 第二步:执行批量替换并自动保存
示例是把所有目标文件里的old_str替换为new_str,每次替换前手动确认::argdo %s/old_str/new_str/gc | update
参数说明:argdo:对参数列表内的所有文件执行后续命令gc:g代表全局匹配单文件内所有目标字符串,c代表替换前弹出确认提示,无需确认可直接删除c参数| update:仅对发生修改的文件执行保存操作,避免无修改的文件被强制重写
方法二:通过 :vimgrep 命令实现
适合仅修改包含目标字符串的文件、不触碰无关文件的场景:
- 第一步:用vimgrep检索所有包含目标字符串的文件
示例是匹配当前项目所有.md文件中包含old_str的文件,检索完成不自动跳转结果::vimgrep /old_str/gj ./**/*.md
参数说明:g:单行存在多个匹配时全部计入结果j:检索完成后停留在当前文件,不自动跳转到第一个匹配结果
- 第二步:对检索结果列表内的文件执行批量替换
:cfdo %s/old_str/new_str/gc | update
参数说明:cfdo:对vimgrep生成的quickfix结果列表内的所有文件执行后续命令
其余替换、保存参数和方法一完全一致
补充提示
- 若替换的字符串包含
/特殊字符,可替换分隔符规避转义,示例::argdo %s#old/str/path#new/str/path#gc | update - 需要忽略大小写匹配时,在替换命令末尾加
i参数即可::argdo %s/old_str/new_str/gci | update - 复杂替换操作前建议先备份项目文件,避免误改无法回滚
内容的提问来源于stack exchange,提问作者John_L_Smith
相关产品推荐
相关产品推荐

