Vim查找與替換命令大全,功能完爆IDE!

来源:https://www.cnblogs.com/yychuyu/archive/2020/04/10/12671147.html
-Advertisement-
Play Games

Vi/Vim 可以說是文本編輯中的一代傳奇人物,直至現在,它仍然在高級程式員的武器庫中占有一席之地。每個 Linux 發行版預設都包含Vim ,而且即使你不是 Linux 系統用戶,你也可以安裝 Vim 。 為什麼到現在還來講這款古老的軟體?因為它牛逼啊!它包含幾乎所有功能的輕量級鍵盤快捷鍵、內置表 ...


Vi/Vim 可以說是文本編輯中的一代傳奇人物,直至現在,它仍然在高級程式員的武器庫中占有一席之地。每個 Linux 發行版預設都包含Vim ,而且即使你不是 Linux 系統用戶,你也可以安裝 Vim 。

為什麼到現在還來講這款古老的軟體?因為它牛逼啊!它包含幾乎所有功能的輕量級鍵盤快捷鍵、內置表達式搜索,以及強大而又穩定的插件生態系統。就連其他現代文本編輯器功能,如漂亮的語法高亮,它也有。你會在不知不覺中愛上這款文本編輯神器。

回到主題,我們今天就來學習 Vim 中的文本搜索和替換功能,幫助你更好地使用 Vim 這款神器。如果你想學習更多 Vim 操作,可以在公眾號「良許Linux」後臺回覆「資料」,有我整理的電子書和視頻。

演示文件創建

為了更好的講解後續內容,我們首先需要準備一個演示文件。在這裡,我生成了一個包含系統上所有已安裝軟體包的文本文件 PackageList.txt 來作為演示文件。

cat PackageList.txt

現在,我們在 Vim 中打開這個文本文件。之後,我們就在這個文件里進行後續的操作演示。

vim PackageList.txt

Vim 搜索功能

在 Windows 下,很多軟體的搜索功能可以使用 ctrl+F 組合鍵調出搜索框,然後完成後續的搜索。但在 Vim 里,我們需要使用以下命令結構實現搜索功能:

?<search_string>

例如,我們想要在 PackageList.txt 文件里搜索 python 這個關鍵詞,可以這樣操作:

?python

預設情況下,搜索會定位到一個離當前游標最近的一個匹配結果。如果我們想要轉到下一個/上一個搜索結果,請使用以下按鍵:

  • n – 尋找下一個匹配結果
  • N – 尋找上一個匹配結果

註意:在使用上述按鍵之前,請不要忘記按 Enter 鍵。否則,搜索詞將會被改變!

上面的只是 Vim 下搜索的基本功能,如果你認為這是它的全部搜索功能,那真是圖樣圖森破。接下來,我們來嘗試一下更強大的搜索功能。

先給出搜索格式:

/\<search_string>/>

這裡,\< 表示字元串開始,/> 表示字元串結束,中間的就是需要搜索的字元串表達式。

與前面的示例一樣,使用 nN 來導航搜索結果。

中間的字元串表達式,不僅支持直接輸入關鍵詞,還支持使用通配符。例如,我們要搜索以 python- 開頭的字元串,可以使用 python* 。這裡 * 表示匹配任意字元。

/\<python*/>

搜索結束後,Vim 會預設將游標放在匹配的關鍵詞的起始字元處。

不喜歡游標的預設定位?沒關係,Vim 允許我們更改游標定位的預設字元位置。

/python/e

這裡,e 的作用是將游標定位到匹配關鍵詞的末尾字元。

不僅如此,使用以下命令模式,你還可以將游標定位在搜索結果的下方或上方。

/<search_string>/+2

or

/<search_string>/-3

你也可以從搜索匹配結果的開頭/結尾偏移游標。例如,以下命令將游標定位在開頭旁邊的3個字元處。

/<search_string>/s+3
/<search_string>/b+3

這裡,s 表示開頭,+3 表示從開頭開始的第 3 個字元。b 也代表開始(begin),它的功能類似於 s 。從截圖中也可以看出,Vim 會自動將 b 翻譯為 s

如果有興趣從搜索匹配結果的末尾進行偏移,請使用 e (end)。

/<search_string/e-2

下麵是對文本文件執行搜索的另一種很棒的方法。

:%s/<search_pattern>//gn

這條命令具體有啥高大上的作用?我們這裡先賣個關子,請繼續往下讀。如果你想學習更多 Vim 操作,可以在公眾號「良許Linux」後臺回覆「資料」,有我整理的電子書和視頻。

Vim 字元串替換

查找和替換是任意一款文本編輯器的一組常見和必備功能。下麵就來講解 Vim 中的字元串替換功能。

Vim 使用以下命令結構實現替換功能。

:<range> s/<search_string>/<replace_string>/<modifier>
  • range - 定義執行“查找和替換”函數的範圍,有兩個不同的值
    • % - 對整個文件執行
    • < start _line > < end_line > - 在一組特定的行上面執行操作
  • search_string - 需要替換的字元串
  • replace_string - 替換舊字元串的新字元串
  • modifier - 確定替換行為,有幾個不同的值
    • g - 全局替換
    • gc - 在每次更換之前要求確認
    • gn - 忽略替換功能並突出顯示查找結果。

例如,在 PackageList.txt 文件里用 Python3 字元串替換所有 python 字元串。

:%s/python/Python3/g

簡單吧?我們再看看下麵這條命令。

:%s/python/Python3/gc

可以看出來,它在底部詢問你是否要進行替換操作。這時,你可以選擇一些操作。那這幾個是代表什麼意思呢?我們一個個來看。

  • y - 允許執行更改。
  • n - 禁止執行更改。
  • a - 替換全部。
  • q - 退出任務。
  • l - 只需替換這種情況。然後,退出。
  • ^E(Ctrl + E) - 向上滾動屏幕
  • ^Y(Ctrl + Y) - 向下滾動屏幕

接下來,我們來試試範圍這一個域。其實,我們在前面的例子里,已經使用了 % 範圍(對整個文件範圍)。

如果我們不想在整個文件範圍進行查找替換,如果我們只想在某幾個特定行進行這種操作,需要怎麼做?我們可以採用類似於以下命令格式:

:200,250 s/python/Python3/g

執行完以上操作,Vim 會將第 200 行開始併在第 250 行結束的所有 python 替換為 Python3

此功能不僅限於一個詞,還可以完成對多個關鍵詞的替換。它的命令格式如下:

:%s/<search_term_1>\|<search_term_2>\|<search_term_3>/<replace_string>/g

比如,讓我們想要將文本中所有 pythonpy 更改為 Python3

:%s/python\|py/Python3/g

區分大小寫

本文前面提到的所有替換操作都是區分大小寫的。例如,PythonpythonPYTHON 等都是不同的。

如果你要忽略大小寫,可以在搜索字元串後面加上一個 \c ,如下:

/<search_term>\c
:%s/<search_term>\c/<replace_term>/g

但這個設置是臨時性的,Vim 關閉之後就會失效。如果你想一勞永逸,也可以從 vimrc文件 直接設置不區分大小寫。

set ignorecase

還有一個有趣的做法:智能大小寫模式。

set smartcase

ignorecase 將強制 Vim 忽略大小寫。但是,如果搜索關鍵詞中只要有大寫字母,smartcase 將使 Vim 再次變為區分大小寫。

註意:如果要啟用 smartcase,首先需要設置 ignorecase

結論

Vim 可以幫助你做很多事情,多加耐心地練習,相信你會越來越喜愛這款古老的神器。

看完的都是真愛,點個贊再走唄?您的「三連」就是良許持續創作的最大動力!

  1. 關註原創公眾號「良許Linux」,第一時間獲取最新Linux乾貨!
  2. 公眾號後臺回覆【資料】【面試】【簡歷】獲取精選一線大廠面試、自我提升、簡歷等資料。
  3. 關註我的博客:lxlinux.net

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 徹底卸載: 把如下代碼複製到文本中,尾碼命名為cmd,右鍵,使用管理員方式打開,否則會報錯 需要下載 install_wim_tweak.exe 這個軟體,後面的壓縮包有。 1 @echo off 2 cd /d "%~dp0" 3 echo Uninstalling ... 4 CLS 5 ins ...
  • ECC是“Error Correcting Code”的簡寫,ECC能夠實現錯誤檢查和糾正,含有ECC功能的記憶體一般稱為ECC記憶體,使用了ECC記憶體的系統在穩定性和可靠性上得到很大提升。相比前幾代不帶ECC的i.MXRT10xx型號,新一代i.MXRT1170在ECC上做了全面武裝,從eFuse到F... ...
  • 本人雲伺服器,裝的cent os7.6,在cent os7.6已裝了docker,沒裝的可以借鑒 https://www.cnblogs.com/xiaoyige/p/12673076.html 1.先下載一個docker鏡像: docker pull centos 2.創建docker容器記得寶塔 ...
  • 1、安裝環境 此處在Centos7進行安裝,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安裝docker要求系統為64位、系統內核版本為 3.10 以上,可以使用以下命令查看 uname -r 2、用yum源安裝 2.1 查看是否已安裝docker列表 我 ...
  • 如何在vue裡面實現一個簡單的中國地圖,並且實現一些簡單的個性化修改。 下麵是最終實現的效果圖。透明的地圖加一個背景圖。 1、在你的項目里安裝echarts的依賴 npm install echarts -s (使用淘寶鏡像安裝也行) 2、引入echarts 全局引入和局部引入根據自己的情況來定 全 ...
  • 當上傳是高安全模式時,我們大可不必非要用上傳滲透實現對伺服器的攻擊,我們可以換一種方式。 1.實驗環境 目標靶機:OWASP_Broken_Web_Apps_VM_1.2 "下載地址" 我們還需要 和`kali`這兩個工具,把所有的殺毒軟體關了,不然中國菜刀可能會被殺毒軟體和諧。 實驗原理及危害 2 ...
  • 問題:同一區域網,Mac(使用Microsoft Remote Desktop)無法遠程連接win7 之前需要兩臺電腦配置的我就不詳細說了,網上有很多。 報錯: 解決辦法: win7 1.運行 -> gpedit.msc 2.電腦配置->管理模版->網路->網路連接->windows防火牆->標準 ...
  • 電力巡檢機器人 電力巡檢人有什麼用?長什麼樣? 炎熱的夏天室外氣溫實在是高,由於陽光的暴曬,設備區的溫度甚至讓人窒息;而下雨天又影響視線,傳統的人工巡檢需要在各種天氣下進行。 而智能電力巡檢機器人的出現,就是為瞭解決以上的難題。電力巡檢機器人身材都比較嬌小,可以在變電站內隨意的穿梭。 頂部的一對大眼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...