原文 http://man.chinaunix.net/newsoft/vi/doc/usr_27.html#usr_27.txt
(一) 偏移
/expr/N 按行偏移,偏移 N行。 N可以为 +- 数, 下同。
/expr/bN 按字符偏移,从匹配开始(begin)算起
/expr/eN 按字符偏移,从匹配末尾(end)算起
(二) 非贪婪匹配
匹配尽可能少的字符 迄今为止,我们所讨论过的都试图匹配尽可能多的字符。若要匹配尽可能少的字符,请 用 "\{-n,m}
"。它的用法跟 "\{n,m}
" 一样,唯一的区别在于,它采用尽可能少的字符。 例如,以下命令:
/ab\
{-1,3}
将匹配 "abbb" 中的 "ab"。实际上,因为没理由匹配更多,所以它永远不会匹配超过一个 b。它需要其它的来强制它超过其下限规定次数,而匹配更多的重复。
这些同样的规则也适用于省略 "n" 和 "m" 的情形。甚至可以把两个都省略,只剩"\{-}
"。这个项匹配其前项的重复,重复次数尽可能少,可以等于或大于零。
这个项如单独使用,则总是匹配前项的零次重复。当它跟与其它的模式合起来时,用处就大了。 例如:
/a.\
{-}
b这个命令匹配 "axbxb" 中的 "axb"。
(三) 多择一
在一个查找模式中,"或" 运算符是 "\|"。例如:
/foo\|bar
这个命令匹配了 "foo" 或 "bar"。
更多的抉择可以连在后面:
/one\|two\
|three
匹配 "one","two" 或 "three"。
如要匹配其多次重复,那么整个抉择结构须置于 "\(" 和 "\)" 之间:/\(foo\|bar\)\+
这个命令匹配 "foo","foobar","foofoo","barfoobar",等等。
再举个例子:
/end\(if\|while\
|for\)
这个命令匹配 "endif","endwhile" 和 "endfor"。
(四) 匹配换行符
Vim 能找寻含有换行符的模式。你需要指定换行符在哪儿出现,因为迄今为止所有我们曾经提到过的项,都不匹配换行符。
用 "\n" 项可以在一个特定的位置查验一个换行符:
/the\nword
这个命令将在一行以 "the" 结尾,而下一行以 "word" 开头的地方找到匹配。
如果还要匹配 "the word",那么你需要匹配一个空格或一个换行符。这可以用 "\_s" 表示:/the\_sword
若要允许任意数量的空格:
/the\_s\+word
这个命令也匹配 "the " 在行尾,及 " word" 在下一行行首的情形。
"\s" 匹配空格字符,"\_s" 匹配空格字符或一个换行符。同理,"\a" 匹配一个字母字 符,而 "\_a" 匹配一个字母字符或一个换行符。其它字符类和字符域都可以通过插入一个 "_" 来更改其范围。 很多别的项也可以在前面加 "\_" 以匹配一个换行符。例如: "\_." 匹配任意字符或一个换行符。
原文: http://man.chinaunix.net/newsoft/vi/doc/pattern.html#%2F[]