[翻譯]
" search for declaration of subroutine/function under cursor
" 尋找游標下子程式/函數的聲明
:nmap gx yiw/^/(sub/<bar>function/)/s/+<C-R>"<CR>
[註解]
:help :nmap
:help iw
:help <Bar>
這個映射中的大部分內容在前面都介紹過。它的思路是先把游標下的單詞拷貝到無名寄存器,然後在這個單詞前加上sub首碼或function首碼進行尋找。
nmap用來建立一個normal下的鍵映射。
iw則用來選擇一個單詞。其它的文字物件,可以通過“:help object-select”查詢。
<bar>用來代表“|”字元,在map命令中經常會用到這種表示方法,詳情參閱“:help <>”。
理解了這個鍵映射的原理後,你可以按自己的需要對其進行修改。
[翻譯]
" multiple file search
" 多檔案尋找
:bufdo /searchstr/ : use :rewind to recommence search
使用:rewind重新開始搜尋
[註解]
:help :bufdo
:help :rewind
這個命令在緩衝區列表中的每個緩衝裡執行尋找。
:rewind命令會跳到參數列表的第一個檔案。所謂參數列表,是指你在啟動VIM時給出的多個檔案名稱,詳見“:help argument-list”。
[翻譯]
" multiple file search better but cheating
" 更好的多檔案尋找技巧
:bufdo %s/searchstr/&/gic : say n and then a to stop
輸入n然後輸入a以停止尋找
[註解]
:help :s
:help s//&
:help :s_flags
這個命令頗具技巧,它實際上是用替換命令實現在多個緩衝區中尋找。它用起來比上面的tip友好多了。
輸入這條命令後,會挨個遍曆每個符合項,需要結束尋找時,按a。這個命令雖然尋找起來方便,但一旦按a中途退出,就會進行替換,導致檔案的改變標記被置位(檔案實際內容並沒發生變化,因為在替換時使用的是原內容)。
在後面的替換一節會詳細介紹:s命令。
[翻譯]
" How to search for a URL without backslashing
" 如何不使用反斜線尋找 URL
?http://www.vim.org/ : (first) search BACKWARDS!!! clever huh!
首先向上尋找!!!聰明啊!!!
[註解]
:help ?
在尋找目錄、或網站連結之類的字串時,因為這些內容中含有“/”,如果用“/”命令尋找,則需要對裡面的“/”進行轉義,很麻煩。
如果用“?”尋找就可以繞開轉義符,多省事!
如果要尋找類似“c:/a/b/c/d/e”的字串,這樣做也許會簡單些:/<C-R>=escape('c:/a/b/c/d/e', '/')
上面的<C-R>是需要按CTRL-R輸入的。
[翻譯]
" Specify what you are NOT searching for (vowels)
" 指定不要尋找什麼
//c/v([^aeiou]&/a){4} : search for 4 consecutive consonants
尋找4個連續的輔音字母
[註解]
:help //c
:help //v
:help //a
這個正則式用來尋找4個連續的輔音字母。
它運用了兩個修辭用的元字元,“/c”表示對其後面的內容忽略大小寫,“/v”表示會將其後的內容中所有 '0'-'9','a'-'z','A'-'Z' 和 '_' 之外的字元都當特殊元字元對待,也就是說,“(”相當於“/(”,“&”相當於“/&”,“{”相當於“/{”;這樣可以減少逸出字元“/”的數目,輸入起來方便多了。如果在“/v”後確實要用這些字元的本義,就需要在字元加逸出字元“/”,以得到本義。
[翻譯]
//%>20l/%<30lgoat : Search for goat between lines 20 and 30 *N*
在第20行到第30行間尋找goat
[註解]
:help //%l
這個正則式在指定的行範圍內尋找。
“/%>20l”表示大於20行,“/%<30l”表示小於30行。
[翻譯]
/^./{-}home./{-}/zshome/e : match only the 2nd occurence in a line of "home" *N*
只匹配一行中第二次出現的"home"
[註解]
這個正則式只匹配行中第二次出現的“home”,這個正則式中用到的元字元在前面都介紹過。
[翻譯]
:%s/home./{-}/zshome/alone : Substitute only the occurrence of home in any line *N*
只替換任意行中 (第二次)出現的"home"
[註解]
:help :s
此命令替換該檔案所有行中第二次出現的“home”。因為“:s”命令沒有使用“g”選項,所以只替換行中第一個符合匹配的字串。
因此,對於類似這樣的行“my home directory is /home/easwy. His home directory is /home/test”,即使“home./{-}/zshome”中沒有使用“^”來指定行首,它仍然只替換第二次出現的“home”。
[參考文檔]
1. http://www.rayninfo.co.uk/vimtips.html
2. http://groups.google.com/group/Vim-cn/msg/f72fba0645955101?
3. VIM協助檔案
4. http://vimcdoc.sourceforge.net/
[尾記]
本文可以自由應用於非商業用途。轉載請註明出處。
原文連結:http://blog.csdn.net/easwy