Vim中的查找和替换功能相当强大,不单可以查找指定字符串,还支持正则表达式,指定光标的位置,结合其他命令对查找结果进行操作...
1. 查找命令
Vim中提供的最基本的查找命令有'/'和'?',其中,'/'用于正向查找;'?'用于反向查找。在执行一次查找操作后,Vim会记住本次所使用的模式(pattern)和偏移量(±nlines)。下一次使用时,只需要指定查找的方向(和/或新的偏移量)即可。
1.1 '/'命令
'/'为正向查找命令,即从光标所在位置起向后/下查找。
命令 | 说明 |
---|---|
/{pattern} | 正向查找指定模式pattern |
/{pattern}/[±]offset | 正向查找指定模式pattern;找到后,以模式所在位置为基准,以指定偏移量移动光标 |
/ | 使用上一次模式和偏移模式进行正向查找 |
//[nline] | 使用上一次的模式和新指定的偏移量进行正向查找;如新偏移量为空,则缺省为0 |
1.2 '?'命令
'?'为反正查找命令,即从光标所在位置起向前/上查找。
命令 | 说明 |
---|---|
?{pattern} | 反向查找指定模式pattern |
?{pattern}?[±]offset | 反向查找指定模式pattern;找到后,以模式所在位置为基准,以指定偏移量移动光标 |
? | 使用上一次模式和偏移模式进行反向查找 |
??[nline] | 使用上一次的模式和新指定的偏移量进行反向查找;如新偏移量为空,则缺省为0 |
1.3 其他查找命令
除'/'和'?'外,Vim还提供了另外几条查找命令:
命令 | 说明 |
---|---|
n | 重复上一次查找操作 |
N | 使用上一次查找操作的模式和偏移量,在相反方向上查找 |
* | 将当前光标所在位置的单词(word①)作为搜索对象,正向查找它的下一处出处位置;如当前光标所在位置处不是单词,则使用其后出现的第一个单词作为搜索模式。查找将忽略大小写。 |
# | 同'*',但查找方向为反向 |
g* | 基本同'*',区别在于,'*'匹配的是单词(单词左右需要有空白定界符),而"g*"匹配的只是字符串。① |
g# | 基本同"#",区别同上 |
gd | 局部声明跳转,常用于查找函数内变量的定义位置。搜索的关键字是光标所在位置处的关键字(变量名),搜索的范围是光标当前所在(或一个)函数(以不一定正确)。Vim会尝试从函数的开始处正向寻找此关键出现的第一处位置(并不一定总是变量的声明之处,而仅仅可能只是变量在函数中第一次出现的位置),如未找到,则光标保持在原位置不变。 |
gD | 全局声明跳转,常用于查找全局变量的定义位置。类似于"gd",但查找的范围是当前文件 |
1gd | 类同于"gd",但会忽略光标位置前结束的第一对'{'和'}'之间的代码 |
1gD | 类同于"gD",同样会忽略光标位置前结束的第一对'{'和'}'之间的代码 |
Ctrl-C | 中止当前正在执行的命令(搜索) |
:noh[lsearch] | 关闭"hlsearch"选项(高亮显示)。下一次搜索时,高度会再次打开 |
说明:Vim中的单词,指由英文大小写字母、数字和下划线构成,由特定边界(空格或制表符等空白符号,或行首/行尾标识)包围起来的字符串。使用'*'进行查找时,搜索的是完整的单词;而使用"g*"查找时,搜索的对象仅仅是构成单词的字符串(单词的边界并不在匹配范围之内)。举例来说,假定光标所在处单词为"b_c",则使用'*'进行查找时,并不会匹配"ab_cd"中的"b_c",而"g*"则会匹配成功。
1.4 查找中的偏移量
偏移量用来控制'/'或'?'命令找到匹配结果后,光标位置的移动。偏移量可以是行偏移量或行内列/字符偏移量。如未指定偏移量,则光标移动至匹配处的首字符位置。
表达式 | 说明 |
---|---|
[±lines] | 指定行偏移量。以匹配结果所在行为基准,'+'(缺省)指定向下移动/'-'指定向上移动,光标同时会定位到该行的第一列。lines可省略,缺省为1 |
e[±cols] | 指定列偏移量。以匹配结果的最后一个字符位置(end)为基准,'+'(缺省)向右移动/'-'向左移动光标cols列。cols可省略,缺省为1 |
s[±cols] | 指定列偏移量。以匹配结果的第一个字符位置(start)为基准,'+'(缺省)向右移动/'-'向左移动光标cols列。cols可省略,缺省为1 |
b[±cols] | 同s偏移(begin,start) |
1.5 其他命令与选项
清除Vim缓存的查找模式
在查找命令之后,可以跟随一个';',再其后跟随另一条查找命令。如
或
/test/+1;/abc
回绕选项
- warpscan或ws : 用来控制查找到文件尾后,是否回绕至文件首部继续搜索。此选项同时也控制着拼写检查命令"]s","]S","[s","[S"
- nowarpscan或nows :不回绕开关
1.6 帮助
更多详细帮助信息,可上网搜索,或在Vim中使用以下命令获取在线帮助(":h"是":help"的简写形式):