vim 匹配查找指定位置的数字,并将数字作运算后赋值

举例,如下文本中有个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

 

这个问题困扰我了一下子,仍是我老婆给了我思路,谢谢老婆。

相关文章
相关标签/搜索