fengxinze的专栏

关注后端技术、分布式

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/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/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之间的数字

    \]   转义字符 ] 

阅读更多
个人分类: Linux开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭