VIM 正則表達式搜索字符串
在插入模式下,為了減少重復的擊鍵輸入,VIM 提供了若干快捷鍵,當你要輸入某個上下文曾經輸入過的字符串時,你只要輸入開頭若干字符,使用快捷鍵,VIM 將搜索上下文,找到匹配字符串,把剩下的字符補全,你就不必敲了。這樣,編程序時你起多長的變量名都沒關系了,:-) 而且還可以減少輸入錯誤。我認為,插入補全是 VIM 最為突出的一項功能。
i<C-P> 向上搜索,補全一個詞。例如,上文中出現過 filename 這個詞,當你想再輸入 filename
時,只要按 f<C-P> 即可。假如 VIM 向上搜索,找到以 f 開頭的第一個匹配不是 filename,你可以繼續按
<C-P> 搜索下一個匹配進行補全。當然,如果你想一次 <C-P> 就成功,你可以多輸入幾個字符比如 filen 再按
<C-P> 補全
i<C-N> 向下搜索,補全一個詞
i<C-X><C-L> 補全一行。比如你寫過一行 for (int i = 0; i < 100;
i++),你想再寫一模一樣的一行,只要輸入 for<C-X><C-L> 即可。如果補全出來的不是你想要的那一行,你可以按
<C-P> 或 <C-N> 選擇上一個或下一個匹配行
i<C-X><C-F> 在文件系統中搜索,補全一個文件名
如果按 <C-P> 或 <C-N> 補全一個詞,在當前文件中沒有找到匹配,VIM 將搜索 #include 語句中的文件,而文件的位置將在 path 中搜索。
搜索字符串用的是正規表達式(Regular expression),其中許多字符都有特殊含義:
\ 取消后面所跟字符的特殊含義。比如 \[vim\] 匹配字符串“[vim]”
[] 匹配其中之一。比如 [vim] 匹配字母“v”、“i”或者“m”,[a-zA-Z] 匹配任意字母
[^] 匹配非其中之一。比如 [^vim] 匹配除字母“v”、“i”和“m”之外的所有字符
. 匹配任意字符
* 匹配前一字符大于等于零遍。比如 vi*m 匹配“vm”、“vim”、“viim”……
\+ 匹配前一字符大于等于一遍。比如 vi\+m 匹配“vim”、“viim”、“viiim”……
\? 匹配前一字符零遍或者一遍。比如 vi\?m 匹配“vm”或者“vim”
^ 匹配行首。例如 /^hello 查找出現在行首的單詞 hello
$ 匹配行末。例如 /hello$ 查找出現在行末的單詞 hello
\(\) 括住某段正規表達式
\數字 重復匹配前面某段括住的表達式。例如 \(hello\).*\1 匹配一個開始和末尾都是“hello”,中間是任意字符串的字符串
對于替換字符串,可以用“&”代表整個搜索字符串,或者用“\數字”代表搜索字符串中的某段括住的表達式。
舉一個復雜的例子,把文中的所有字符串“abc……xyz”替換為“xyz……abc”可以有下列寫法:
:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g
其它關于正規表達式搜索替換的更詳細準確的說明請看 :help pattern
例如:在文本中搜索所有包含amount大于0的以[ ] 括住的字符串的行,如 “amount[123]“, ”amount[200]“ 等:
首先按 :進入命令 模式,然后輸入下面的串再回車開始查找:/amount\[[1-9]\([0-9]*\)\+\]
解釋如下:
/ 表示進行串搜索, 其它字符為 正則表達式的內容
amount 表示匹配串包含amount
\[ 轉義字符,表示匹配左中括號 [
[1-9] 表示匹配一位1到9之間任何數字
\( \) 轉義的左右括號,表示括住某段正則表達式,
\+ 轉義字符+,表示前面一個字符或一個正則串重復1次或多次,所以,\([0-9]*\) 表示 任意個0-9之間的數字
\] 轉義字符 ]
文章出處:http://blog.csdn.net/fengxinze/article/details/6870106