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

时间:2018-03-30 04:21:30

标签: regex vim

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

2 个答案:

答案 0 :(得分:3)

我将假设"应用正则表达式",表示通过:s替换许多文件。

Vim并没有附带一个"一体机"原生项目范围内的发现&替换命令。相反,它通常是一个两步过程:

  • 收集位置/文件/缓冲区/窗口/标签
  • 使用* do命令在集合上应用命令

Arg list

arg列表只是一个文件列表。您可以在启动Vim时填充它,例如Vim启动后vim *.txt或通过:args

:args *.txt
:argdo %s/foo/bar/g | w

快速修复/位置列表

quickfix(& location list)只是一个位置列表,例如文件,行,列。您可以使用许多命令填充这些列表,例如:vimgrep:grep:make:cexpr等。使用:cdo在每个位置上运行命令。 :cfdo将对列表中的每个文件运行命令。

:vimgrep /foo/ **/*.txt
:cfdo %s/foo/bar/g | w

许多人喜欢使用:grep,因为您可以自定义'grepprg'以使用快速grep替代方案,例如The Silver Searcherripgrepack。我也会recommend mapping :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),以防出现严重错误。

就个人而言,我通常在我的多个文件替换中使用quickfix列表。我使用:grep和ripgrep进行快速项目搜索。

如需更多帮助,请参阅:

相关Vimcasts集:

另见:

: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

答案 1 :(得分:2)

尝试以标签模式打开所有文件,即gvim -p file1 file2 .....

然后做:tabdo