这一个星期研究了下vim的相关命令
这里记录一下学到的高级一点的用法
1)s匹配整行
用:s/.*/xxxx 将当前行的内容替换为xxxx
解释一下:vim的正则表达式中,.匹配任何单个字符,*表示前面匹配原的任意次重复,所以能匹配到整行的内容。
这个是需要注意的地方,因为常用的通配符中*代表任意单个或多个字符,可能会错误的认为*或^*$能匹配到整行。
:%s/.*world.* 清空含有world的行
2)s中匹配内容的使用
举个例子,例如有10行文本
abc1
abc2
abc3
abc4
abc5
abc6
abc7
abc8
abc9
abc10
想要变成这种格式:
abcxx: abc: xx,如abc4: abc: 4
那么可用下面的命令:
:205,214 s/\([a-z]\+\)\(\d\+\)/\0\: \1: \2
解释一下:
205,214是这10行的行号范围
匹配的内容其实是:[a-z]\+\d\+,意思很简单,就是一个或多个小写字母连上一个或多个数字
替换为:\0\: \1: \2
\0代表匹配的整个内容,也就是一个或多个小写字母连上一个或多个数字
\1代表第一对\(\)中的匹配内容,也就是[a-z]\+,所以是一个或多个小写字母
依次类推,\2代表第二对\(\)中的匹配内容,也就是\d\+,所以是一个多个数字
可以到\9。
1
2
3
变为
imgx.png
用命令
:214,216 s/.*/img\0\.png
就变为了
img1.png
img2.png
img3.png
还原回去用u命令,重做用ctrl+r命令
还原回去也可以用命令
214,216 s/img\|\.png//g
3)g命令来给内容加上标号
用如下命令给205到213行设定标号
let i=1 | 205,213 g/^/s//\=printf("%02d ", i)/|let i=i+1
4)录制宏
normal模式下输入qq进入录制模式,然后i进入插入模式,对当前行进行编辑操作,按ESC返回正常模式,输入q结束录制,然后输入@q就可以执行录制的宏
例如:
1
2
3
4
5
6
7
8
9
输入qq开始录制,到第一行,i进入插入模式,在1前面输入img,1后面输入.png,第一行就变成了img1.png,ESC到normal模式,q退出录制
输入
:2,9 norm @q
那么第1到第9行都变成了imgx.png的格式,就是重复执行一组命令
在norm模式下,输入q:进入历史命令列表,这是一个可编辑缓冲区