vim 匹配查找指定位置的數字,並將數字做運算后賦值


舉例,以下文本中有個DSC開頭的以數字命名的jpg文件,我想修改文件名為在原來的基礎上加上32,比如第一行中的字符改為:DSC00099.JPG

在vim中輸入:
:%s/DSC[0]\+\(\d\+\)/\=printf("DSC%05d",submatch(1)+32)/

詳解:

\(\)之間的內容是與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 刪除空白行  

 

 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

 

這個問題困擾我了一會兒,還是我老婆給了我思路,謝謝老婆。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM