2012年6月26日 星期二

VIM 的進階搜尋取代功能

images
VIM 的強大可能很多人有耳聞過,

不過就連自己已經使用很久了,卻都只是用些基本功能,

並沒有很仔細的去研究它的強大。

今天要跟大家簡單的介紹一下 VIM 的近街搜尋取代功能。


VIM 在搜尋取代的功能裡,其實是支援一些正規表示式的,

詳細的使用方式可以在 VIM 命令模式下輸入 ":h \w" 來查詢,

這次要講的搜尋取代功能,也可以透過 ":h substitude" 來查詢說明,

基本的使用方式是 ":%s/要搜尋的/要取代的/",

接下來要簡單的介紹一個用法,

Down: X:198.1250        Y:375.5859        count:1    time:139219
Move: X:215.9375        Y:376.3672        count:2    time:140458
Move: X:223.7500        Y:376.3672        count:3    time:140478
Move: X:234.3750        Y:376.3672        count:4    time:140497
Move: X:252.5000        Y:376.3672        count:5    time:140515
Move: X:269.3750        Y:375.5859        count:6    time:140535
Move: X:277.5000        Y:376.3672        count:7    time:140561
Move: X:287.8125        Y:376.3672        count:8    time:140578
Move: X:304.6875        Y:376.3672        count:9    time:140594


這是一個有座標資訊與時間的一份文件,

我現在想要把所有座標資訊,只保留小數點以後的資訊,

意思就是去除掉整數部分,並且在整數部分補上 0,

我們先取代 X 的部分,在 VIM 命令模式下輸入 ":%s/X:\w\w\w/0/",

其中上方 \w 代表正圭表示式裡的 [A-Za-z0-9_] ,

所以\w\w\w代表的就是三位數的整數部分,

Down: 0.1250          Y:375.5859         count:1    time:139219
Move: 0.9375          Y:376.3672         count:2    time:140458
Move: 0.7500          Y:376.3672         count:3    time:140478
Move: 0.3750          Y:376.3672         count:4    time:140497
Move: 0.5000          Y:376.3672         count:5    time:140515
Move: 0.3750          Y:375.5859         count:6    time:140535
Move: 0.5000          Y:376.3672         count:7    time:140561
Move: 0.8125          Y:376.3672         count:8    time:140578
Move: 0.6875          Y:376.3672         count:9    time:140594

另外取代 Y 的部分,在 VIM 命令模式下輸入 ":%s/Y:\w\w\w/0/",

Down: 0.1250        0.5859        count:1    time:139219
Move: 0.9375        0.3672        count:2    time:140458
Move: 0.7500        0.3672        count:3    time:140478
Move: 0.3750        0.3672        count:4    time:140497
Move: 0.5000        0.3672        count:5    time:140515
Move: 0.3750        0.5859        count:6    time:140535
Move: 0.5000        0.3672        count:7    time:140561
Move: 0.8125        0.3672        count:8    time:140578
Move: 0.6875        0.3672        count:9    time:140594

完成!

另外特別列出一些比較常用的各種正規表示式:

\d
匹配一個數字字元。等價於[0-9]。

\D
匹配一個非數字字元。等價於[^0-9]。

\f
匹配一個換頁符。等價於\x0c和\cL。

\n
匹配一個換行符。等價於\x0a和\cJ。

\r
匹配一個回車符。等價於\x0d和\cM。

\s
匹配任何空白字元,包括空格、製表符、換頁符等等。等價於
[ \f\n\r\t\v]。

\S
匹配任何非空白字元。等價於[^ \f\n\r\t\v]。

\t
匹配一個製表符。等價於\x09和\cI。

\v
匹配一個垂直製表符。等價於\x0b和\cK。

\w
匹配包括下劃線的任何單詞字元。等價於「[A-Za-z0-9_]」。

\W
匹配任何非單詞字元。等價於「[^A-Za-z0-9_]」。

沒有留言:

張貼留言