Vim中的正则与多文件搜索、批量替换

最近需要处理一些 html 文件,目的说起来很简单:去掉其中的几个特定的 div。
对于 Windows 用户,多文件搜索推荐 FileLocator Pro,正则处理推荐 RegexBuddy
两个软件相对于 Vim 更加人性化。
脱离 Win 之后没有了趁手的工具,只能捡起 Vim 这个宰牛刀……

vim中的正则与常用的正则有些出入:

  • \. 匹配任意字符(不包含换行)
  • \_. 匹配任意字符(包含换行)
  • \{-} 表示懒惰模式
    具体 :h regexp

以替换多行注释为例 <!-- 多行注释 -->

  1. 定位到指定目录
    :cd /target/folder

  2. 打开单个文件
    e: target.html

  3. 测试匹配
    /<!--\_.\{-}--> 多行注释
    /<!--.\{-}--> 单行注释

  4. 多文件搜索
    :vimgrep /test/ **/*.html 当前目录和子目录
    :vimgrep /test/ *.html 当前目录
    :vimgrep /test/ subfolder/* 子目录
    vimgrep 之后可以 :copen 打开 quickfix 查看匹配的列表

  5. 批量替换

  • 添加文件 :args **/*.html
  • 批量替换 :argdo %s/cha1/cha2/ | update

更多:

  • \? 匹配0或1次
  • 引用 :%s/<h\(\d\)>/head\1/g<h1><h2><h3> 替换为head1 head2 head3
  • 断言:

    1. \zs 匹配开始
      /hello \zsworld
      匹配hello world中的world, 其他的如my world不匹配

    2. \ze 匹配结束
      /hello\ze world
      匹配hello world 中的 hello, 其他的如 hello kitty 不匹配

  • /<\/\?h\zs\d\ze> 用来匹配 <h1></h1> <h2></h3>中的 1 1 2 3 数字

暂时就是这些。

参见:

vim 查找多个文件, 替换 @wangchenxicool

目录

  1. 1. vim中的正则与常用的正则有些出入:
  2. 2. 以替换多行注释为例 <!-- 多行注释 -->
    1. 2.1. 更多:
    2. 2.2. 参见: