举例,以下文本中有个DSC开头的以数字命名的jpg文件,我想修改文件名为在原来的基础上加上32,比如第一行中的字符改为:DSC00099.JPG 在vim中输入:
:%s/DSC[]\+\(\d\+\)/\=printf("DSC%05d",submatch()+)/
详解:
\(\)之间的内容是与submatch(1)中对应的内容,也就是说,submatch(1)代表了\(\)中间的内容,这里是匹配的数字。
printf()函数与c语言中的一样,“”中的内容就是格式化输入的内容
\d 表示匹配数字
\+ 表示匹配1次或者多次
[0] 表示匹配数字0
\= 表示后面的内容是个表达式
:%s/find/replace/ 表示查找find后用replace替换
如果输入中没有:[0]\+,那么\(\)会匹配DSC后面的00067,vim会认为00067是个8进制数(十进制是:55)。
补充几个快捷键:
cc:删除当前行并在合适的位置开始输入,等价于ddo
在插入模式下,<C-R>然后按=号可以调用简单的计算器
:g/^$/d 删除空白行
DSC00067.JPG
stuos/j;itpoismlojmhl;lj/DSC00066.JPG
/kjoiuo/poi\joij/DSC00068.JPG
DSC00069.JPG
DSC00070.JPG
/kjoiuo/poi\joij/DSC00071.JPG
/kjoiuo/poi\joij/DSC00072.JPG
这个问题困扰我了一会儿,还是我老婆给了我思路,谢谢老婆。