vim技巧两则:使用数字序列替换匹配的pattern和插入数字序列

使用数字序列替换

vim查找替换时,可以使用一个数字序列来替换匹配的内容

1
:let i=1 \[range\]g/PATTERN/s//\\=i/g let i=i+1

插入数字序列

1
:put =range(11,15)

可以在文件当前行后插入5行:

1
2
3
4
5
11
12
13
14
15

函数式替换

在替换命令 s/// 中可以使用函数表达式来书写替换内容,格式为

1
:s/替换字符串/\\=函数式

在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。

举个栗子,将文件从第一行开始的行首替换为如下样式:

1
2
3
4
mem\[0\]=
mem\[1\]=
mem\[2\]=
...

可以执行如下替换:

1
:%s/^/\\='mem\['.(line(".")-1).'\]='

References:
[1]Making a list of numbers
[2]vi/vim的巧妙使用-数值加减,递增,序列等