Vim 替换命令速查

:w

Vim 替换命令速查

在 Vim 中,替换命令的基本格式是:

:[range]s/pattern/replacement/[flags]
  • range:指定替换的行范围
  • pattern:要查找的模式(可用正则表达式)
  • replacement:替换成的内容
  • flags:可选参数,例如 g 表示一行内全部替换,c 表示确认,i 表示忽略大小写

🔹 范围控制

  • 当前行替换

    :s/foo/bar/g
    
  • 指定行号范围

    :10,20s/foo/bar/g
    
  • 从当前行到文件末尾

    :.,$s/foo/bar/g
    
  • 全文件替换

    :%s/foo/bar/g
    
  • 可视模式选区替换

    1. 进入可视模式(vV)选择文本
    2. 输入:
      :s/foo/bar/g
      

🔹 Flags 参数

  • g → 一行内全部替换
  • c → 每次替换确认
  • i → 忽略大小写
  • I → 强制区分大小写

示例:

:%s/foo/bar/gc

→ 全文件替换,每次确认


🔹 特殊字符处理

  • 路径替换(避免 / 冲突)

    :%s#/usr/local/bin#/opt/bin#g
    :%s|C:\Program Files|D:\Apps|g
    
  • 转义特殊字符

    :%s/\/usr\/local\/bin/\/opt\/bin/g
    
  • 替换为包含 & 的内容

    :%s/foo/\&bar/g
    

    & 在替换中表示“匹配到的内容”,需转义

  • 替换为包含反斜杠 \

    :%s/path/\\\\newpath/g
    

    → 实际结果是 \\newpath


🔹 正则替换

  • 匹配数字

    :%s/[0-9]\+/NUMBER/g
    
  • 匹配行首/行尾

    :%s/^foo/bar/g   " 行首
    :%s/foo$/bar/g   " 行尾
    
  • 分组与引用

    :%s/\(foo\)\(bar\)/\2\1/g
    

    → 把 foobar 替换成 barfoo


🔹 替换结果引用

  • & → 整个匹配内容
  • \1, \2 → 正则分组引用
  • ~ → 上一次替换的 replacement

示例:

:%s/foo/&bar/g

→ 把 foo 替换成 foobar


🔹 特殊场景

  • 替换空格

    :%s/ /_/g
    
  • 替换 Tab

    :%s/\t/    /g
    
  • 替换换行符(合并行)

    :%s/\n/ /g
    
  • 大小写转换

    :%s/foo/\Ubar/g   " 转大写
    :%s/foo/\lbar/g   " 转小写
    :%s/foo/\u&/g     " 首字母大写
    

🔹 实战案例

  • 批量修改函数名

    :%s/my_func/new_func/g
    
  • 替换配置文件路径

    :%s#/etc/nginx/conf.d#/etc/nginx/sites-enabled#g
    
  • 日志文件中替换时间格式

    :%s/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\2\/\3\/\1/g
    

    → 把 YYYY-MM-DD 转换成 MM/DD/YYYY


🔹 总结

  • 范围:% 全文件,10,20 指定行,.,$ 当前到末尾
  • Flags:g 全部,c 确认,i 忽略大小写
  • 特殊字符:用其他分隔符或转义
  • 正则:支持分组、引用、行首行尾匹配
  • 替换结果:& 表示匹配内容,\1 引用分组
  • 特殊场景:路径、大小写、空格、换行都可处理