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