如何将正则表达式应用于gvim中的多个文件?
我将假设"应用正则表达式",意味着通过:s
对许多文件进行替换。
Vim没有带有"多合一"的原生项目范围的查找和替换命令。相反,它通常是一个两步过程:
- 收集位置/文件/缓冲区/窗口/选项卡
- 使用 *do 命令对集合应用命令
参数列表
arg 列表只是一个文件列表。您可以在启动 Vim 时填充它,例如vim *.txt
或 Vim 启动后通过:args
。
:args *.txt
:argdo %s/foo/bar/g | w
快速修复/位置列表
快速修复(和位置列表)只是位置列表,例如文件,行,列。您可以使用许多命令填充这些列表,例如:vimgrep
、:grep
、:make
、:cexpr
等使用:cdo
对每个位置运行命令。:cfdo
将对列表中的每个文件运行命令。
:vimgrep /foo/ **/*.txt
:cfdo %s/foo/bar/g | w
许多人喜欢使用:grep
,因为您可以自定义'grepprg'
以使用快速的grep替代品,例如The Silver Searcher,ripgrep,ack。我还建议映射:cnext
和:cprev
。
缓冲区
您可以使用:bufdo
在所有打开的缓冲区上运行命令。使用:ls
查看已打开的缓冲区。
:bufdo %s/foo/bar/g | w
窗户
可以使用:windo
对当前标签页中的所有窗口运行命令。这有助于通过:windo diffthis
进行比较。
:windo %s/foo/bar/g | w
制表符
通过:tabdo
对所有选项卡运行命令。
:tabdo %s/foo/bar/g | w
各种提示
一些关于更好地查找和替换工作流程的想法。
- 使用
e
标志可防止在找不到匹配项时停止:s
。 - 可能需要提前构建搜索模式,然后使用
:s//{replacment}
以避免再次键入该模式。 - 研究使用 traces.vim 为替换提供视觉反馈。
- 与所有项目范围的替换一样,最好使用某种版本控制(例如 git、mercurial、svn),以防出现严重错误。
就个人而言,我通常使用快速修复列表进行大多数多个文件替换。我将:grep
与 ripgrep 一起使用,以便快速搜索项目。
有关更多帮助,请参阅:
相关剧集:
- 项目范围的查找和替换
- 使用 :vimgrep 搜索多个文件
- 使用 :argdo 更改多个文件
另请参阅:
:h :s
:h :bar
:h arglist
:h :argdo
:h quickfix
:h :cdo
:h :grep
:h :vimgrep
:h 'grepprg'
:h buffer
:h :bufdo
:h window
:h :windo
:h tabpage
:h :tabdo
尝试以选项卡模式打开所有文件,即gvim -p file1 file2 .....
然后做:tabdo