超酷的 Vim 搜索技巧
Vim 中的基礎搜索操作
當你在 Vim 中打開一個文件並且想要搜索一個特定的單詞或模板,第一步你必須要先按下 Esc
鍵從插入模式中退出(如果你正處於插入模式中)。之後輸入 /
並緊接著輸入你要搜索的單詞或搜索模式。
例如,如果你想要搜索的單詞是 linux
,下圖顯示的就是在 Vim 窗口底部的搜索命令:
敲擊回車鍵之後,你會看到 Vim 會將游標停留在從游標在插入模式中的位置開始,找到的包含此單詞的第一行。如果你剛剛打開一個文件並且立即開始了搜索操作,搜索將從文件的首行開始。
如果想要移動到下一處包含被搜索單詞位置,按 n
鍵。當你遍歷完所有被搜索模板所在之處,繼續按 n
鍵 Vim 將重複搜索操作,游標將回到第一次搜索結果出現位置。
在遍歷搜索結果時,如果你想要回到上一匹配處,按 N
(即 shift
+ n
)。同時,值得注意的是不管在什麼時候,你都可以輸入 ggn
來跳轉到第一個匹配處,或者 GN
來跳轉到最後一處。
當你恰好在文件的底部,而且想要逆向搜索的情況下,使用 ?
代替 /
來開始搜索。下圖是一個例子:
自定義你的搜索
1、 高亮搜索結果
儘管通過 n
或 N
從被搜索單詞或模式的匹配處跳轉到另一處很簡單,但是如果匹配處能夠高亮就更加人性化了。例如,請看下附截圖:
這可以通過設置 hlsearch
變數來實現,例如在普通/命令行模式中執行下述命令:
:set hlsearch
2、使搜索不區分大小寫
在 Vim 中進行搜索默認是區分大小寫的。這就意味著如果我要搜索 linux
,那麼 Linux
是不會匹配的。然而,如果這不是你想要的搜索方式,你可以使用如下命令來使搜索變得不區分大小寫:
:set ignorecase
所以當我設置 ignorecase
變數後再使用前邊提到的命令,搜索 linux
,那麼 Linux
所在處也會被高亮。
3、智能大小寫搜索
Vim 提供了一個功能,只有當要搜索的單詞 / 模板包含大寫字母時,編輯器才會區分大小寫。要想實現這種功能,必須先設置 ignorecase
,再接著設置 smartcase
變數。
:set ignorecase
:set smartcase
例如,如果一個文件中既包含 LINUX
也包含 linux
,在開啟智能大小寫搜索功能時,如果使用 /LINUX
進行搜索,只有單詞 LINUX
處會被搜到。反之,如果搜索 /linux
,那麼不論大小寫的搜索結果都會被匹配。
4、遞進搜索
就如谷歌一樣,隨著你輸入查詢字串(字串隨你每輸入一個字元不斷更新)顯示不同的搜索結果,Vim 也同樣提供了遞進搜索。要想使用這種特性,你必須在搜索前執行下述命令:
:set incsearch
一些很酷的在 Vim 中搜索的小技巧
你可能會發現還有一些其他的與搜索相關的小技巧很有用。
開始吧!如果你想要搜索一個文件中的一個單詞,但是又不想輸入它,你只需要將你的游標移到這個單詞下然後按 *
(或者 shift
+ 8
)。如果你想要啟動一次部分搜索(例如:同時搜索 in
和 terminal
),那你需要將游標移到到單詞(在本例中, in
)下,然後通過在鍵盤上按 g*
(按一次 g
然後不斷按 *
)。
注意:如果你想要逆向搜索,按 #
或者 g#
。
這裡有個視頻,你可以看看:
下一個,只要你想要,你可以獲得所有被搜索單詞或模式匹配處所在的行和行號的一個列表。這可以在你開始搜索後通過按 [I
來實現。如下圖是一個列表結果如何在 Vim 窗口底部被分組和顯示的例子:
接下來,你可能已經得知,Vim 默認是環形搜索的,意味著在到達文件結尾處(或者被搜索單詞的最後一處匹配)時,如果繼續按 「搜索下一個」 會將游標再次帶回第一處匹配處。如果你希望禁止環形搜索,可以使用如下命令:
:set nowrapscan
再次開啟環形搜索,使用如下命令即可:
:set wrapscan
最後,假設你想要對文件中已經存在的單詞做一點小小的修改,然後對修改後的單詞執行搜索操作,一種方法是輸入 /
與要搜索的單詞。但是如果這個單詞又長又複雜,那麼可能需要一點時間來輸入它。
一個簡單的辦法是將游標移到你想要略微修改的單詞下,按 /
之後再按 Ctrl
+ r
最後按 Ctrl
+ w
。這個在游標下的單詞不僅僅會被拷貝,也會被複制到 /
後,允許你對它進行修改並且繼續進行搜索操作。
如果想要獲得更多小技巧(包括如何使用滑鼠來使在 Vim 中的操作變得簡單),請前往 Vim 官方文檔。
結語
當然,沒有人希望你死記硬背這裡提到的所有小技巧。你應該做的是,從一個你認為對你最有益的技巧開始不斷練習。當它成為一種習慣並且嵌入你的記憶後,重新來這兒找找你應該開始學習的下一個技巧。
你知道其他像這樣的技巧嗎?並且希望能夠和大家一起分享?那就在下邊留言吧!
via: https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/
作者:Himanshu Arora 譯者:xiaow6 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive