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

 

這個問題困擾我了一下子,仍是我老婆給了我思路,謝謝老婆。

相關文章
相關標籤/搜索