您的位置:首页 > 其它

Vim中的查找/替换与正则表达式(1)

2012-12-03 11:42 274 查看


Vim中的查找/替换与正则表达式(1)

发表于 2011
年 03 月 26 日 由 admin

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缓存的查找模式

:let @/ = ""

在查找命令之后,可以跟随一个';',再其后跟随另一条查找命令。如

/test/;/abc



/test/+1;/abc

回绕选项

warpscan或ws :
用来控制查找到文件尾后,是否回绕至文件首部继续搜索。此选项同时也控制着拼写检查命令"]s","]S","[s","[S"

nowarpscan或nows :不回绕开关


1.6 帮助

更多详细帮助信息,可上网搜索,或在Vim中使用以下命令获取在线帮助(":h"是":help"的简写形式):

:h pattern-searches

此条目发表在 others, Unix-like 分类目录,贴了 Linux, vim 标签。将固定链接加入收藏夹。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: