简要记录 Vim 中常用的搜索和替换功能。
搜索
行内搜索
在 Vim 中行内搜索的最简单方法莫过于使用f
键,即按下f
键后,再次按下要搜索单词的任意字母便会跳到对应位置。不过缺点也同样明显:只能对单字符进行搜索,且不支持中文。
- 向前搜索:
f
- 向后搜索:
F
- 上一匹配:
,
- 下一匹配:
;
其实严格意义上f
键并不是一个「搜索」motion,而是「移动」motion,不过有时候搜索一个字符也是为了移动到对应位置,因此这里也一并提及。
全文搜索
/
是进入全文搜索的触发键,按下该键之后输入想要搜索的字符,再按回车键即可跳到第一个匹配处,此时可以按n
继续向下搜索,或按N
往回搜索。
- 向前搜索:
/
- 向后搜索:
?
- 上一匹配:
N
- 下一匹配:
n
另外默认搜索是区分大小写的,如果要忽略大小写,可以使用元字符\c
:
如果只想搜索处于行首或行尾的字符,可以使用元字符^
和$
:
需要注意的是匹配行首的元字符必须放在搜索字符前,同样匹配行尾的元字符必须放在末尾。
光标字符搜索
如果想搜索的字符刚好处于光标下,使用*
键是一个比/
键更加优雅的办法,按下该键后会立即跳到下一个匹配处。同样可以使用n
和N
键进行向前和往后匹配。
替换
替换和搜索不同,并没有独立的按键直接进入替换模式,而是同样使用:
进入命令行模式后,以s
作为元字符标示。一个最简单的替换命令为:/s/Vim/World
,作用是把当前行的Vim
替换为World
,重复执行使用&
键,当然也只对当前行有效。
- 进入替换模式:
:s/目标/替换
- 重复替换:
&
如果想对当前行所有匹配都执行替换,可以在末尾增加标志符/g
,即:s/目标/替换/g
。
作用范围
作用范围是指可以进行替换操作的范围:/作用范围s/目标/替换/g
。
全局
使用百分号%
(等效于1,$
)表示对全局进行操作:%s/目标/替换/g
。
指定范围
指定范围有两种方式,一是直接使用行号标记,另一种是使用高亮选取:
如果使用高亮选取,需先选中需要操作的范围,然后按:
键会自动补全范围:
标志符
标志符便是前面提到用于替换所有匹配的/g
,一般位于最后:%s/目标/替换/标志符
,除了必备的/g
之外还有几个常用的标志符。
替换前提示
如果想在替换前进行确认,可以在末尾增加标志符c
,即%s/目标/替换/gc
,这样只有按指定键后才会执行操作:
- 替换:
y
- 忽略:
n
- 全部:
a
- 退出:
Esc
或q
统计匹配数
自然,能替换同样也可以搜索,使用标志符n
可以抑制正常的替换操作,达到搜索目的,而且还有一个额外的功能,即统计匹配的数量。命令如下:%s/目标//gn