VIM使用正则表达式搜索字符串的方法详解

发布时间:2020-12-11编辑:脚本学堂
本文介绍下,在linux下的编辑利器vim中,使用正则表达式搜索字符串的方法,有需要的朋友参考下吧。

为大家介绍VIM中正则表达式的用法,使用正则搜索字符串,有时效率会很高,当然这个效率是针对我们使用者而言。

在插入模式下,为了减少重复的击键输入,VIM 提供了若干快捷键,当你要输入某个上下文曾经输入过的字符串时,你只要输入开头若干字符,使用快捷键,VIM 将搜索上下文,找到匹配字符串,把剩下的字符补全,你就不必敲了。这样,编程序时你起多长的变量名都没关系了,:-) 而且还可以减少输入错误。我认为,插入补全是 VIM 最为突出的一项功能。

i<C-P>   向上搜索,补全一个词。
例如,上文中出现过 filename 这个词,当你想再输入 filename 时,只要按 f<C-P> 即可。
假如 VIM 向上搜索,找到以 f 开头的第一个匹配不是 filename,你可以继续按 <C-P> 搜索下一个匹配进行补全。
当然,如果想一次 <C-P> 就成功,你可以多输入几个字符比如 filen 再按 <C-P> 补全
i<C-N>   向下搜索,补全一个词
i<C-X><C-L>      补全一行。比如你写过一行 for (int i = 0; i < 100; i++),你想再写一模一样的一行,只要输入 for<C-X><C-L> 即可。如果补全出来的不是你想要的那一行,你可以按 <C-P> 或 <C-N> 选择上一个或下一个匹配行
i<C-X><C-F>      在文件系统中搜索,补全一个文件名

如果按 <C-P> 或 <C-N> 补全一个词,在当前文件中没有找到匹配,VIM 将搜索 #include 语句中的文件,而文件的位置将在 path 中搜索。

搜索字符串用的是正规表达式(Regular expression),其中许多字符都有特殊含义:
 

        取消后面所跟字符的特殊含义。比如 [vim] 匹配字符串“[vim]”
[]       匹配其中之一。比如 [vim] 匹配字母“v”、“i”或者“m”,[a-zA-Z] 匹配任意字母
[^]      匹配非其中之一。比如 [^vim] 匹配除字母“v”、“i”和“m”之外的所有字符
.        匹配任意字符
*        匹配前一字符大于等于零遍。比如 vi*m 匹配“vm”、“vim”、“viim”……
+       匹配前一字符大于等于一遍。比如 vi+m 匹配“vim”、“viim”、“viiim”……
?       匹配前一字符零遍或者一遍。比如 vi?m 匹配“vm”或者“vim”
^        匹配行首。例如 /^hello 查找出现在行首的单词 hello
$        匹配行末。例如 /hello$ 查找出现在行末的单词 hello
()     括住某段正规表达式
数字    重复匹配前面某段括住的表达式。例如 (hello).*1 匹配一个开始和末尾都是“hello”,中间是任意字符串的字符串

对于替换字符串,可以用“&”代表整个搜索字符串,或用“数字”代表搜索字符串中的某段括住的表达式。

复杂点的例子,把文中的所有字符串“abc……xyz”替换为“xyz……abc”,有下列写法:
 

:%s/abc(.*)xyz/xyz1abc/g
:%s/(abc)(.*)(xyz)/321/g

其它关于正规表达式搜索替换的详细说明,请参看 :help pattern

例如:在文本中搜索所有包含amount大于0的以[ ] 括住的字符串的行,如 “amount[123]“,  ”amount[200]“ 等:

首先按 :进入命令 模式,然后输入下面的串再回车开始查找:/amount[[1-9]([0-9]*)+]

解释:
 

/  表示进行串搜索, 其它字符为 正则表达式的内容
amount  表示匹配串包含amount
[  转义字符,表示匹配左中括号 [
[1-9]  表示匹配一位1到9之间任何数字
(  )   转义的左右括号,表示括住某段正则表达式,
+  转义字符+,表示前面一个字符或一个正则串重复1次或多次,所以,([0-9]*) 表示 任意个0-9之间的数字
] 转义字符 ]