字 符 偏 移
偏移符 "e" 表示一个偏移从匹配末尾算起。它把光标移到匹配的最后一个字符上。命令:
/const/e
把光标放到单词 "const" 的 "t" 上。
加一个数字,光标就从该位置再前移该数字指定的那么多个字符。下面这个命令会将光标移到匹配后面第一个字符:
/const/e+1
一个正数使光标右移,负数使其左移。例如: >
/const/e-1
会把光标移到单词 "const" 的 "s" 字符上。
如果偏移以 "b"开头,那么光标就移到匹配模式的首位。因为不用"b"
光标也一样会被移到首位,所以单独使用时没什么意义。在将它与一个
加上或减去的数字合起来时,就很有用了。光标就会前移或后移那么多个
字符。例如:
/const/b+2
会把光标移到匹配的首位,再往右移两个字符。因而落在字符 "n" 上。
起 始 位 置
查找时,通常从光标位置开始。当你规定的是一个行偏移,这可能造成麻烦。例如: >
/const/-2
这个命令找到下一个单词 "const",然后上移两行。
多择一
在一个查找模式中,"或" 运算符是 "\|"。例如: >
/foo\|bar
预 定 义 范 围
有些字符范围使用得很频繁。Vim 为这些字符范围提供了一些快捷方式。例如: >
/\a
这个命令找寻字母字符。这相当于使用 "/[a-zA-Z]"。下面还有几个这样的字符范围:
项 匹配 相当于 ~
\d 数位 [0-9]
\D 非数位 [^0-9]
\x 十六进制数位 [0-9a-fA-F]
\X 非十六进制数位 [^0-9a-fA-F]
\s 空白字符 [ ] (<Tab> 和 <Space>)
\S 非空白字符 [^ ] (非 <Tab> 和 <Space>)
\l 小写字母 [a-z]
\L 非小写字母 [^a-z]
\u 大写字母 [A-Z]
\U 非大写字母 [^A-Z]
匹配换行符
Vim 能找寻含有换行符的模式。你需要指定换行符在哪儿出现,因为迄今为止所有我们 曾经提到过的项,都不匹配换行符。 用 "\n" 项可以在一个特定的位置查验一个换行符: >
/the\nword
这个命令将在一行以 "the" 结尾,而下一行以 "word" 开头的地方找到匹配。如果还要 匹配 "the word",那么你需要匹配一个空格或一个换行符。这可以用 "_s" 表示: >
/the\_sword
若要允许任意数量的空格: >
/the\_s\+word
这个命令也匹配 "the " 在行尾,及 " word" 在下一行行首的情形。
"\s" 匹配空格字符,"_s" 匹配空格字符或一个换行符。同理,"\a" 匹配一个字母字 符,而 "_a" 匹配一个字母字符或一个换行符。其它字符类和字符范围都可以通过插入 一个 "_" 来更改其范围。
很多别的项也可以在前面加 "_" 以匹配一个换行符。例如: "_." 匹配任意字符或一个 换行符。
备注:
"\_.*" 匹配任何字符,直至文件结束。要小心,它会使查找命令执行得非常缓
慢。
另一个例子是 "_[]",一个包含了换行符的字符范围: >
/"\_[^"]*"
这个命令找寻位于一对双引号之间,可能分隔成数行的文本。