Vim 搜索与替换:行内查找 / 全局搜索 / 正则替换
更新时间:2026-08-30。本文是
languages/vim/主题入门层第 6 篇。
本文要回答的问题
- 怎么在文件里搜一个词?怎么跳下一个/上一个匹配?
:s替换怎么写?怎么替换整行 / 全文件 / 带确认?- 替换里能不能用正则?
一、搜索:/ 和 ?
进入命令行模式敲 / 开始向下搜,? 向上搜:
vim
/foo " 向下找 foo
?bar " 向上找 bar
/foo\c " \c 忽略大小写搜索时用的其实是正则(见下文),所以 . * [] 都有特殊含义;要搜字面量加 \ 转义,如 /\. 搜小数点。
跳匹配:
| 键 | 作用 |
|---|---|
n | 下一个匹配 |
N | 上一个匹配 |
* | 搜光标下单词(向下) |
# | 搜光标下单词(向上) |
高亮与居中:set hlsearch 开高亮、nzz 把当前匹配滚到屏幕中央。
二、替换::s(substitute)
最基础形式:[范围]s/旧/新/[标志]
| 命令 | 作用 |
|---|---|
:s/old/new/ | 替换当前行第一个 old |
:s/old/new/g | 替换当前行所有 old(g = global) |
:%s/old/new/g | 替换全文件所有 old(% = 全部行) |
:s/old/new/gc | 每处替换前确认(c = confirm) |
:10,20s/old/new/g | 只替换 10~20 行 |
确认模式下:y 替换、n 跳过、a 全部替换、q 退出、l 替换并退出。
三、替换里的正则
Vim 的正则和 PCRE 略有差异(默认非常数,魔法等级见 高手正则篇),常用:
| 写法 | 含义 |
|---|---|
. | 任意单字符 |
* | 前一项重复 0+ 次 |
\+ | 前一项重复 1+ 次(Vim 里 + 要转义) |
\(...\) | 捕获组,替换里用 \1 \2 引用 |
\d | 数字;\w 词字符 |
例子:把 foo(123) 改成 bar(123):
vim
:%s/foo(\(\d\+\))/bar(\1)/g四、实战:改配置里的端口
假设要把所有 8080 改成 9090:
vim
:%s/8080/9090/gc逐处确认,避免误伤注释里的 8080。
五、与本站主线衔接
一句话总结
/ 搜、n/N 跳匹配;:s/旧/新/g 改当前行、%s///g 改全文件、c 标志逐处确认;替换里能用正则捕获组 \1 做结构化改写——这是服务器改配置的日常主力。
上一篇:Vim 编辑与文本对象 下一篇:Vim 缓冲区 / 多窗口 / 标签页