三个参数的话,中间参数是step,两个参数的话就是开始数字和结束数字,step为1
通过r !seq 1 5来在文件中插入数字序列, 然后用列模式拷贝使用
使用printf
直接插入行号
| :%s/^/=printf('%-4d', line('.')) |
其中-是左对齐,默认右对齐
在指定行插入序列
首先中V来选择要插入序号的块
| :'<,'>s/^/=printf("%-4d. ", line(".")-line("'<")+1) |
只在非空行插入序列
将下面func放入到.vimrc里
| function Inc(...) let result = g:i let g:i += a:0 > 0 ? a:1 : 1 return result endfunction |
a:0相当于argc, a:1相当于argv[1]
g:i是全局变量i
然后选中相应块
| :let i = 1 :'<,'>g/^S/s/^/=printf("%4d. ", Inc()) |
range和print
下面三条命令都是在指定行下面插入序列
| :12put = range(1,5) :call append(12, range(1,5)) :0put = range(3,7) |
第一条命令和第二条等价
0put的话,就在第一行前
range和print相结合可以输出格式化的结果
| :0put = map(range(1,5), 'printf(''%04d'', v:val)') |
v:val代表前面列表中取出的值
直接使用for更清晰易懂些
| :for i in range(1,10) | put = '192.168.0.'.i | endfor |
特定字符后加序列号
| :let i=1|g/abc/s//='abc_'.i/ | let i= i+1 |
但上面命令有个问题,如果一行有多个abc, 那么都替换成一样的数字,而不会递增
要解决上面的问题可以使用寄存器
| :let @a=1 | %s/abc/='abc_'.(@a+setreg('a',@a+1))/g |
setreg()回返回0,所以利用上面的方法来调用setreg来更新寄存器a的值
vim8的ctrl-a
vim8对Ctrl-A提供了新功能
比如有
| my_array[0] = 0; my_array[1] = 0; my_array[2] = 0; my_array[3] = 0; my_array[4] = 0; my_array[5] = 0; my_array[6] = 0; |
用ctrl-V列选中0-0, 然后按g Ctrl-A,
列选中前面的0-6, 然后也按g Ctrl-A
最终结果是
| my_array[2] = 1; my_array[4] = 2; my_array[6] = 3; my_array[8] = 4; my_array[10] = 5; my_array[12] = 6; |
g Ctrl-A的原理是在第一数字上加1, 第二个数字上加2, 第三个数字上加3...
插件VisIncr
主要命令有I, II, IYMD, IMDY, IA,ID, IO, IR, IX








