在 Vim 中查找和替換的 5 個技巧

讀者您好! 今天我們再來看看vim,特別是在vim中我們是如何方便的查找和替換的。 在本文中,我們將介紹可以找到和替換並實現無鼠標 vim 目標的前 5 種方法。 記得處理箭頭鍵!

Vim 教程:開始使用 VIM 所需的一切

目錄

他和? 領域

在 vim 中搜索的最簡單和最直接的方法是通過 / 和 ? 命令 如果你在 vim 中:

  • 依次按 Esc 和 /
  • 然後輸入你要搜索的詞
  • 點擊 Enter 將帶您到光標後搜索詞的外觀。
  • 要在事件之間移動,您可以按 n 鍵並返回按 N 鍵。

您甚至可以通過簡單地鍵入兩個詞來搜索彼此相鄰的兩個詞,這將僅顯示這些詞彼此相鄰的情況。

如果要禁用突出顯示,請在正常模式下使用以下命令:

                      
:noh

                    

這 ? 該命令與 / 命令非常相似,但向後搜索整個文件。 在這種情況下,n 鍵向後搜索,N 鍵向前搜索。

另請參閱:退出編輯器 vim 的 10 種方法

* 和 # 命令

如果要搜索光標下的單詞,只需在普通模式下按 * 鍵即可。 光標將放置在光標下方最近出現的單詞上。 您現在可以再次按 * 鍵搜索下一個匹配項,或者您也可以使用 n 和 N 鍵向前或向後滾動搜索結果。

# 與 * 相同,但反向搜索。

您可以通過發出命令忽略大小寫進行搜索:

                      
:set ic

                    

在上述兩種情況下,您都可以簡單地定位單詞並在正常模式下按 ciw(在單詞內更改)刪除單詞並進入插入模式。 但是當我們要替換很多次出現的時候,這種方法就比較麻煩了,為此,我們再多看看。

Emacs 對比 Vim:Linux 主要終端編輯器之間的區別

s 命令(替代)

在 vim 中,命令 s 代表替換。 要替換單詞,請在正常模式下運行以下命令:

                      
:s/search_word/substitute_word

                    

該命令將僅用當前行中給出的替換替換第一次出現的搜索詞。 為了替換每行中的第一個匹配項,我們添加一個 % 符號來指示當前文件,因此命令變為:

                      
:%s/search_wprd/substitue_word

                    

但是我們還沒有完成,因為如果你仔細觀察,上面的命令只替換了行中的前幾次出現,我們需要的是一個完整的替換,為此我們添加了代表全局的 g 標誌:

                      
:%s/search_word/substitue_word/g

                    

類似地,如果我們只是想替換當前行中所有出現的地方,那麼我們將執行帶有 g 標誌但開頭沒有 % 符號的命令:

:s/search_word/replace_word/g

s 命令的高級使用

如果只想替換第 4 行到第 7 行中的一個單詞怎麼辦? ok,我們可以直接替換命令開頭的%號來指定命令s的範圍,所以命令為:

                      
:4,7s/search_word/substitue_word

                    

如果我們想找到搜索詞的大小寫敏感度,我們可以為不區分大小寫的替換添加 i 並為區分大小寫的替換添加 I 標誌。 實際執行的命令是:

                      
:4,7s/search_word/substitue_word/i
:4,7s/search_word/substitue_word/I

                    

如果您只想提交每個更改,我們可以為此添加 c 標誌,因此如果您不確定範圍和替換位置,只需在整個文件上運行帶有 c 標誌的替換命令並在必要時提交:

:%s/search_word/replace_word/gIc

現在,在確認消息中,每次替換都有多個選項。 具體來說,您有以下七個選項:

  • y --> 是的,執行替換
  • n –> 不,不做替換
  • a --> 在此之後更改所有出現的地方
  • q –> 不作任何更改退出
  • l -> 將其作為最後一個替換然後退出
  • ctrl+Shift+e –> 向下移動屏幕(搜索事件)
  • ctrl+Shift+y –> 向上移動屏幕

現在,這一切都很好,但您可能已經註意到搜索詞不僅匹配整個詞,而且在某些情況下它只是另一個詞的一部分。 為了解決這個問題,我們必須將搜索詞包裹在 < 和 > 中,並且我們還必須記住在這樣做時對這些字符進行轉義! 所以命令現在是:

                      
:s/<search_word>/substitute_word

                    

g 命令

g 命令代表全局命令。 該命令的語法如下:

                      
:g/pattern/command

                    

這樣做是針對整個文檔中與給定模式匹配的行運行給定的命令。 假設我們正在處理以下文件:

                      
  -- Base
import XMonad
import System.Directory
import System.IO (hClose, hPutStr, hPutStrLn)
import System.Exit (exitSuccess)
import qualified XMonad.StackSet as W

                    

現在出於某種原因,我們希望刪除所有導入,我們可以使用 g 命令執行此操作:

                      
:g/import/d

                    

它所做的是在所有包含單詞 import 的行上運行 d(刪除)命令。 同理,我們也可以反其道而行之,即去掉所有沒有import字樣的行:

                      
:g!/import/d
OR
:v/import/d

                    

我們可以用 g 命令做一些非常高級的事情。 假設我們要刪除文檔中的所有空行,為此我們執行以下命令:

                      
:g/^s*$/d

                    

這裡 s* 表示零個或多個空白字符,$ 表示行尾,因此 s*$ 本質上表示空行。

結論

至此,您已經掌握了 vim 必須提供的一些最佳搜索和替換命令。 如果您對更多精彩的 vim 文章感興趣,請隨時瀏覽這裡!

相關文章