在插入模式下,爲了減小重複的擊鍵輸入,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> 在文件系統中搜索,補全一個文件名express
若是按 <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」,中間是任意字符串的字符串vim
對於替換字符串,能夠用「&」表明整個搜索字符串,或者用「\數字」表明搜索字符串中的某段括住的表達式。字符串
舉一個複雜的例子,把文中的全部字符串「abc……xyz」替換爲「xyz……abc」能夠有下列寫法:
:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g
其它關於正規表達式搜索替換的更詳細準確的說明請看 :help patternio
例如:在文本中搜索全部包含amount大於0的以[ ] 括住的字符串的行,如 「amount[123]「, 」amount[200]「 等:變量
首先按 :進入命令 模式,而後輸入下面的串再回車開始查找:/amount\[[1-9]\([0-9]*\)\+\]file
解釋以下:搜索
/ 表示進行串搜索, 其它字符爲 正則表達式的內容程序
amount 表示匹配串包含amount
\[ 轉義字符,表示匹配左中括號 [
[1-9] 表示匹配一位1到9之間任何數字
\( \) 轉義的左右括號,表示括住某段正則表達式,
\+ 轉義字符+,表示前面一個字符或一個正則串重複1次或屢次,因此,\([0-9]*\) 表示 任意個0-9之間的數字
\] 轉義字符 ]