Best of VIM Tips(譯註) – 連載6 尋找(e)

來源:互聯網
上載者:User

[翻譯]

" 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.