gvim 替換插入遞增數列


gvim 中有如下文本, 我們想把末尾的數字替換成遞增的數列。

#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0

可以采用如下gvim命令:

: let i=0|g/BIT_SET_\zs\d*\ze/s//\=i/|let i=i+1

解析:

詞條命令里實際包含了三條命令,用|分隔

第一條命令定義初始變量i,初值為0;

第二條命令為gvim中的global命令。\zs \ze 指明了匹配的開始與結束,也就是替換命令所要替換的區域。替換命令s//\=i/意即將前面\zs \ze匹配的區域替換為i的值。\=指明后面是一個表達式。

第三條命令將變量i做遞增運算。

如果我們只想對上面文本中的某幾行做替換,而不是全部。也就是我們想要的結果是這樣的:

#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_1
#define BIT_SET_2
#define BIT_SET_3
#define BIT_SET_4
#define BIT_SET_5
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0
#define BIT_SET_0

  可以將命令修改為:

:let i=1|3,7g/BIT_SET_\zs\d*\ze/s//\=i/|let i=i+1

如果只是想要替換其中的非連續的幾行,可以修改命令s/pattern/\=i/,如此只會修改pattern所匹配的行。此pattern是去匹配global命令中\zs\ze所指定的部分。

例子:

如果只想替換下面代碼中數字部分為1開頭的行,可以修改命令為:

:let i=0|g/BIT_SET_\zs\d*\ze/s/1\d*/\=i/|let i+i+1

 

#define BIT_SET_0
#define BIT_SET_1
#define BIT_SET_2
#define BIT_SET_3
#define BIT_SET_4
#define BIT_SET_5
#define BIT_SET_6
#define BIT_SET_7
#define BIT_SET_8
#define BIT_SET_9
#define BIT_SET_10
#define BIT_SET_11
#define BIT_SET_12

 


免責聲明!

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



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