Vim中的正则与多文件搜索、批量替换
date
‣
slug
vim-regex-search-replace
status
Published
tags
Vim
Regex
summary
最近需要处理一些 html 文件,目的说起来很简单:去掉其中的几个特定的 div。
对于 Windows 用户,多文件搜索推荐 FileLocator Pro,正则处理推荐 [RegexBuddy](http://www.cnblogs.com/Fooo/archive/2008/08/28/12787...
type
Post
最近需要处理一些 html 文件,目的说起来很简单:去掉其中的几个特定的 div。
对于 Windows 用户,多文件搜索推荐 FileLocator Pro,正则处理推荐 RegexBuddy
两个软件相对于 Vim 更加人性化。
脱离 Win 之后没有了趁手的工具,只能捡起 Vim 这个宰牛刀……
vim中的正则与常用的正则有些出入:
\.
匹配任意字符(不包含换行)
\_.
匹配任意字符(包含换行)
\{-}
表示懒惰模式 具体:h regexp
以替换多行注释为例 <!-- 多行注释 -->
- 定位到指定目录
:cd /target/folder
- 打开单个文件
e: target.html
- 测试匹配
/<!--\_.\{-}-->
多行注释/<!--.\{-}-->
单行注释
- 多文件搜索
:vimgrep /test/ **/*.html
当前目录和子目录:vimgrep /test/ *.html
当前目录:vimgrep /test/ subfolder/*
子目录 vimgrep 之后可以:copen
打开 quickfix 查看匹配的列表
- 批量替换
- 添加文件
:args **/*.html
- 批量替换
:argdo %s/cha1/cha2/ | update
更多:
- ? 匹配0或1次
- 引用
:%s/<h\(\d\)>/head\1/g
把<h1><h2><h3>
替换为head1 head2 head3
- 断言:
\zs
匹配开始 /hello\zs
world 匹配hello world
中的world
, 其他的如my world
不匹配\ze
匹配结束 /hello\ze
world 匹配hello world
中的hello
, 其他的如hello kitty
不匹配
- /</
\?
h\zs
\d\ze
> 用来匹配<h1></h1> <h2></h3>
中的 1 1 2 3 数字
暂时就是这些。
参见:
vim 查找多个文件, 替换 @wangchenxicool