如何将正则表达式应用于gvim中的多个文件?
答案 0 :(得分:3)
我将假设"应用正则表达式",表示通过:s
替换许多文件。
Vim并没有附带一个"一体机"原生项目范围内的发现&替换命令。相反,它通常是一个两步过程:
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 Searcher,ripgrep,ack。我也会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}
来避免再次输入模式。就个人而言,我通常在我的多个文件替换中使用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