1. 程式人生 > >超酷的 Vim 搜尋技巧

超酷的 Vim 搜尋技巧

譯者:xiaow6 Linux核心之旅

儘管目前我們已經涉及 Vim 的多種特性,但此編輯器的特性集如此龐大,不管我們學習多少,似乎仍然遠遠不足。承接我們的 Vim 教程系列,本文我們將討論 Vim 提供的多種搜尋技術。-- Himanshu Arora
本文導航
  • -Vim 中的基礎搜尋操作06%

  • -自定義你的搜尋27%

    • -1、 高亮搜尋結果27%

    • -2、使搜尋不區分大小寫35%

    • -3、智慧大小寫搜尋44%

    • -4、遞進搜尋52%

  • -一些很酷的在 Vim 中搜索的小技巧56%

  • -結語88%

儘管目前我們已經涉及[1] Vim 的多種特性,但此編輯器的特性集如此龐大,不管我們學習多少,似乎仍然遠遠不足。承接我們的 Vim 教程系列,本文我們將討論 Vim 提供的多種搜尋技術。

不過在此之前,請注意文中涉及到的所有的例子、命令、指令均是在 Ubuntu 14.04,Vim 7.4 下測試的。

Vim 中的基礎搜尋操作

當你在 Vim 中開啟一個檔案並且想要搜尋一個特定的單詞或模板,第一步你必須要先按下 Esc 鍵從插入模式中退出(如果你正處於插入模式中)。之後輸入 / 並緊接著輸入你要搜尋的單詞或搜尋模式。

例如,如果你想要搜尋的單詞是 linux,下圖顯示的就是在 Vim 視窗底部的搜尋命令:

Search for words in vim

敲擊回車鍵之後,你會看到 Vim 會將游標停留在從游標在插入模式中的位置開始,找到的包含此單詞的第一行。如果你剛剛開啟一個檔案並且立即開始了搜尋操作,搜尋將從檔案的首行開始。

如果想要移動到下一處包含被搜尋單詞位置,按 n 鍵。當你遍歷完所有被搜尋模板所在之處,繼續按 n 鍵 Vim 將重複搜尋操作,游標將回到第一次搜尋結果出現位置。

Move to next search hit

在遍歷搜尋結果時,如果你想要回到上一匹配處,按 N (即 shift + n)。同時,值得注意的是不管在什麼時候,你都可以輸入 ggn 來跳轉到第一個匹配處,或者 GN 來跳轉到最後一處。

當你恰好在檔案的底部,而且想要逆向搜尋的情況下,使用 ? 代替 / 來開始搜尋。下圖是一個例子:

search backwards

自定義你的搜尋

1、 高亮搜尋結果

儘管通過 n

 或 N 從被搜尋單詞或模式的匹配處跳轉到另一處很簡單,但是如果匹配處能夠高亮就更加人性化了。例如,請看下附截圖:

Search Highlighting in VIM

這可以通過設定 hlsearch 變數來實現,例如在普通/命令列模式中執行下述命令:

  1. :set hlsearch

set hlsearch

2、使搜尋不區分大小寫

在 Vim 中進行搜尋預設是區分大小寫的。這就意味著如果我要搜尋 linux,那麼 Linux 是不會匹配的。然而,如果這不是你想要的搜尋方式,你可以使用如下命令來使搜尋變得不區分大小寫:

  1. :set ignorecase

所以當我設定 ignorecase 變數後再使用前邊提到的命令,搜尋 linux,那麼 Linux 所在處也會被高亮。

search case-insensitive

3、智慧大小寫搜尋

Vim 提供了一個功能,只有當要搜尋的單詞 / 模板包含大寫字母時,編輯器才會區分大小寫。要想實現這種功能,必須先設定 ignorecase,再接著設定 smartcase 變數。

  1. :set ignorecase

  2. :set smartcase

例如,如果一個檔案中既包含 LINUX 也包含 linux,在開啟智慧大小寫搜尋功能時,如果使用 /LINUX 進行搜尋,只有單詞 LINUX 處會被搜到。反之,如果搜尋 /linux,那麼不論大小寫的搜尋結果都會被匹配。

4、遞進搜尋

就如谷歌一樣,隨著你輸入查詢字串(字串隨你每輸入一個字元不斷更新)顯示不同的搜尋結果,Vim 也同樣提供了遞進搜尋。要想使用這種特性,你必須在搜尋前執行下述命令:

  1. :set incsearch

一些很酷的在 Vim 中搜索的小技巧

你可能會發現還有一些其他的與搜尋相關的小技巧很有用。

開始吧!如果你想要搜尋一個檔案中的一個單詞,但是又不想輸入它,你只需要將你的游標移到這個單詞下然後按 * (或者 shift + 8)。如果你想要啟動一次部分搜尋(例如:同時搜尋 in 和 terminal),那你需要將游標移到到單詞(在本例中, in)下,然後通過在鍵盤上按 g* (按一次 g 然後不斷按 * )。

注意:如果你想要逆向搜尋,按 # 或者 g# 。

這裡有個視訊,你可以看看:

下一個,只要你想要,你可以獲得所有被搜尋單詞或模式匹配處所在的行和行號的一個列表。這可以在你開始搜尋後通過按 [I 來實現。如下圖是一個列表結果如何在 Vim 視窗底部被分組和顯示的例子:

grouped search results

接下來,你可能已經得知,Vim 預設是環形搜尋的,意味著在到達檔案結尾處(或者被搜尋單詞的最後一處匹配)時,如果繼續按 “搜尋下一個” 會將游標再次帶回第一處匹配處。如果你希望禁止環形搜尋,可以使用如下命令:

  1. :set nowrapscan

再次開啟環形搜尋,使用如下命令即可:

  1. :set wrapscan

最後,假設你想要對檔案中已經存在的單詞做一點小小的修改,然後對修改後的單詞執行搜尋操作,一種方法是輸入 / 與要搜尋的單詞。但是如果這個單詞又長又複雜,那麼可能需要一點時間來輸入它。

一個簡單的辦法是將游標移到你想要略微修改的單詞下,按 / 之後再按 Ctrl + r 最後按 Ctrlw。這個在游標下的單詞不僅僅會被拷貝,也會被複制到 / 後,允許你對它進行修改並且繼續進行搜尋操作。

如果想要獲得更多小技巧(包括如何使用滑鼠來使在 Vim 中的操作變得簡單),請前往 [2]

結語

當然,沒有人希望你死記硬背這裡提到的所有小技巧。你應該做的是,從一個你認為對你最有益的技巧開始不斷練習。當它成為一種習慣並且嵌入你的記憶後,重新來這兒找找你應該開始學習的下一個技巧。

你知道其他像這樣的技巧嗎?並且希望能夠和大家一起分享?那就在下邊留言吧!