舉例,以下文本中有個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
這個問題困擾我了一會兒,還是我老婆給了我思路,謝謝老婆。