Vim中的正则表达式
1 元字符对照表
| Perl 元字符 | Vim 元字符 | 说明 |
|---|---|---|
| \ | \ | 元字符<—>普通字符 |
| ^ | ^ | 字符串的开始位置。vim中表示行首 |
| $ | $ | 字符串的结束位置。vim中表示行尾巴 |
| * | * | 零次或多次 |
| + | \+ | 一次或多次 |
| ? | \?或者\= | 零次或一次 |
| {n} | \{n} | 匹配确定的 n 次 |
| {n,} | \{n,} | 至少匹配n 次 |
| {n,m} | \{n,m} | 最少匹配 n 次且最多匹配 m 次 |
| ? | \{-}\{-1,}\{-,1} | 跟在限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。vim中的三个相当于*? +? ?? |
| . | . | 除换行符(\n、\r)之外的任何单个字符 |
| (pattern) | 匹配 pattern 并获取这一匹配 | |
| (?:pattern) | \%(atom) | 匹配 pattern 但不获取匹配结果 |
| (?=pattern) | \(pattern\)\@= | 正向肯定预查,标注pattern前面 |
| (?!pattern) | \(pattern\)\@! | 正向否定预查 |
| (?<=pattern) | \(pattern\)\@< = | 反向肯定预查 |
| (?<!pattern) | \(pattern\)\@<! | 反向否定预查 |
| x|y | \| | 或者,注意优先级最低 |
| [xyz] | [abc] | 匹配所包含的任意一个字符 |
| [^xyz] | [^abc] | 匹配未包含的任意字符 |
| [a-z] | 匹配指定范围内的任意字符 | |
| [^a-z] | 匹配任何不在指定范围内的任意字符 | |
| \b | \<和\> | 单词和空格间的位置。vim中的单词首和单词尾 |
| \B | 匹配非单词边界 | |
| \cx | 匹配由 x 指明的控制字符 | |
| \d | \d | [0-9] |
| \D | \D | [^0-9] |
| \n | 换行符 | |
| \r | 回车符 | |
| \s | \s | 匹配空白字符,等价于 [ \f\n\r\t\v] |
| \S | \S | 匹配非空白字符 |
| \w | \w | [A-Za-z0-9_] |
| \W | \W | [^A-Za-z0-9_] |
2 Vim中的4种模式
Vim中包括magic(默认)和nomagic两种模式
在magic模式中,除了\ $ . * ^五个元字符,其他元字符都需要加反斜杠,可以用\m打开
在nomagic模式中,除了\ $ ^三个元字符,其他元字符都需要加反斜杠可以用\M打开
此外,还有\v(very magic)和\V(very nomagic)两种模式
在very magic模式中,所有的元字符都不用加反斜杠
在very nomagic模式中,所有的元字符都需要加反斜杠
3 替换
在vim中,可以实用:[range]s/正则表达式/替换字符串/[option]命令来替换文中的字符
在正则表达式中用\(\)括起来的内容,可以在替换字符串中用\1、\2等引用
range
默认只在当前行中匹配
%表示在所有行中匹配(相当于1,$)
1,10表示从第1到第10行
.,$代表从当前行到本文件的末尾
option
g(global)表示全局匹配,否则只替换在行中匹配的第一个内容
c(comfirm)表示每次替换前询问
y:确认执行这个替换将将所有Vim替换成vim;
n:取消这个本交Vim替换命令的操作;
a:执行本次所有替换字符串操作且不再询问;
q:退出当前vim字符串替换操作而不做任何改动;
l:替换完当前匹配点后退出(last)
i(ignorecase)表示不区分大小写
n表示忽略替换操作,只统计匹配到的数量
4 函数式
也可以使用:s/替换字符串/\=函数式进行操作
在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。
:%s/\<id\>/\=line(".")
" 将各行的 id 字符串替换为行号
:%s/^\<\w\+\>/\=(line(".")-10) .".". submatch(1)
" 将每行开头的单词替换为 (行号-10).单词 的格式,
" 如第11行的 word 替换成 1. word



7998

被折叠的 条评论
为什么被折叠?



