如何将 gvim 正则表达式应用于多个文件



如何将正则表达式应用于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

最新更新