【Vim Masterclass 筆記10】S06L23:Vim 核心操作訓練之 —— 文本的搜索、查找與替換操作(第二部分)

文章目錄

  • S06L23 Search, Find, and Replace - Part Two
    • 1 文本替換命令 `:s/old/new/`
    • 2 指定范圍的文本替換
    • 3 特例:路徑的替換
    • 4 文件行號的配置
    • 5 要點總結
      • (1)搜索當前行(Same Line Searching)
      • (2)跨行搜索(Searching)
      • (3)替換命令(Substitute Command)

寫在前面
根據李笑來《自學是門手藝》的建議,梳理完知識要點后又對這章內容制作了 Xmind 思維導圖,果然發現很多遺漏和生疏的細節。其實自學的很多訣竅都是老生常談,觀點普遍到幾乎沒人真正重視:預習、專注學習、復習、總結、學以致用……我們總以為看到的 99% 就是自學者的真實畫像了,卻往往忽略了重要性和比例(至少在自學這個問題上)并沒有正相關的聯系,所以才對這樣的老生常談不屑一顧。建議對 Vim 感興趣的朋友也親自整理一下思維導圖,相信一定會有驚喜。

S06L23 Search, Find, and Replace - Part Two


本課同步練習文件:vimclass/searching.txt

1 文本替換命令 :s/old/new/

這里的 s 就是 substitute 的首字母,表示 “替換”。

例如,將下列文本行中的 net 替換為 org

DOMAIN=example.net                      # The example.net doma    in.

可以使用如下命令::s/net/org/

注意:末尾還有一個 /;并且該寫法只能替換匹配的 第一個關鍵詞

若要實現全局替換,需加全局標記 g,語法為::s/old/new/[flags],本例即為 :s/net/org/g

2 指定范圍的文本替換

語法::[range]s/old/new/[flags],默認范圍為 當前行

其中,[range] 范圍有不同的寫法:

  1. 具體行號。例如,將第 1 行的 is 替換為 isn't,使用命令::1s/is/isn't/
  2. 具體行號范圍。例如,將 1 ~ 5 行中的 for 全部替換為 FOR:1,5s/for/FOR/
  3. 使用特殊行號標識:. 表示當前行,$ 表示最后一行。例如,從當前行到最后一行執行替換,[range] 部分寫作:.,$
  4. % 表示所有行(即整個文件)。例如,將當前文件中的所有 net 替換為 org,寫作::%s/net/org/g
  5. 范圍的正則表示:[range] 部分語法為 /pattern-1/,/pattern-2/。例如,從包含 Global 的行開始,到包含 Local 的行結束,將 net 統一替換為 org:/Global/,/Local/s/net/org/g
  6. 也可以將 /pattern/ 和普通、特殊行號一起使用。例如,將 net 全部替換為 org,指定范圍從 Local 開始、并到當前文件末尾結束,可以寫作::/Local/,$s/net/org/g

3 特例:路徑的替換

特殊情況下,如果需要用 :s/old/new/ 命令對 路徑內容 進行替換,例如將 MAIL_PATH=/var/spool/mail 替換為 MAIL_PATH=/usr/local/mail。此時由于路徑分隔符和 :s 命令的分隔符相同(如 LinuxUnixMacOS 等環境下),實現這類替換有兩種方法:

  1. 常規方法:使用 \ 進行轉義,寫作::s/\/var\/spool/\/usr\/local/
  2. 使用其他字符作 :s 命令的分隔符,例如改為 #,寫作::s#/var/spool#/usr/local#

第一種方法雖然簡單,但可讀性很差,也很容易出錯。第二種方式更加簡便靈活,因此強烈推薦使用第二種。除了用 # 分隔,還可以用管道符號 | 或者 : 進行分隔,只要是 單個的非數字、非字母字符(single non-alphanumberic character) 即可。

注意

其實 /var/spool 前面的 / 可以不參與替換,這樣更簡便。但為了更好地演示自定義 :s 命令的分隔符,還是決定保留下來以示區別。

4 文件行號的配置

本節反復提到文件行號的使用,是時候好好講講行號的配置了:

行號狀態行號配置命令
開啟行號:set nu
關閉行號:set nonu
查看當前狀態:set nu?
切換行號開關:set nu!

注意:nu 的全稱為 number,上述命令也可以使用 number 替換 nu。查看當前狀態時,若未啟用行號,Vim 狀態欄將顯示 nonumber;已開啟行號則顯示 number

圖 1:使用 :set nu? 命令顯示的不同 Vim 狀態對比情況

【圖 1:使用 :set nu? 命令顯示的不同 Vim 狀態對比情況】

5 要點總結

這是官方給的知識點梳理,感覺沒我自己整理的思維導圖細致(哈哈)

(1)搜索當前行(Same Line Searching)

  • f{char}:Forward search
  • F{char}:Reverse search
  • t{char}:Forward till search
  • T{char}:Reverse till search
  • ;:Repeat in the same direction
  • ,:Repeat in the opposite direction

(2)跨行搜索(Searching)

  • /{pattern}:Forward search
  • ?{pattern}:Reverse search
  • n:Repeat search in the same direction
  • N:Repeat search in the opposite direction
  • *:Forward search for word
  • #:Reverse search for word

(3)替換命令(Substitute Command)

語法::[range]s/{pattern}/{string}/[flags]

例如在當前文件內實現全局替換::%s/{pattern}/{string}/g

此外,還可以在命令前添加數量詞 [count],或者與 motion 操作進行組合,實現更多靈活多變的替換效果。

最后,給出我自己歸納的 L22~L23 Vim 查找與替換的思維導圖:

圖 2:Vim 查找與替換部分(L22 + L23)思維導圖

【圖 2:Vim 查找與替換部分(L22 + L23】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65869.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機網絡】課程 實驗五 靜態路由配置

實驗五 靜態路由配置 一、實驗目的 理解靜態路由的工作原理,掌握如何配置靜態路由。 二、實驗分析與設計 【背景描述】 假設校園網分為 2 個區域,每個區域內使用 1 臺路由器連接 2 個子網, 現要在路由器上 做適當配置,實現校…

Python 繼承示例:有與無 `super().__init__()` 的區別

文章目錄 Python 繼承示例:有與無 super().__init__() 的區別父類(Parent)子類(Child)不調用 super().__init__()子類(Child)調用 super().__init__() Python 繼承示例:有與無 super…

Linux下部署Redis(本地部署超詳細)

非docker 1、下載Redis 歷史版本: http://download.redis.io/releases 我的: http://download.redis.io/releases/redis-7.0.5.tar.gz 2.安裝教程 1.Redis是基于c語言編寫的需要安裝依賴,需要安裝gcc yum install gcc-c 2.查看gcc版…

Spring——幾個常用注解

環境配置 1.在配置文件中導入約束(context — 共三個)并添加一項配置( context:annotation-config/) 才能支持注解的使用 context 約束: xmlns:context“http://www.springframework.org/schema/context” 2.xsi:schemaLocation下的:" http://ww…

Oopsie【hack the box】

Oopsie 解題流程 文件上傳 首先開啟機器后,我們先使用 nmap -sC -SV來掃描一下IP地址: -sC:使用 Nmap 的默認腳本掃描(通常是 NSE 腳本,Nmap Scripting Engine)。這個選項會自動執行一系列常見的腳本&am…

單片機-定時器中斷

1、相關知識 振蕩周期1/12us; //振蕩周期又稱 S周期或時鐘周期(晶振周期或外加振蕩周期)。 狀態周期1/6us; 機器周期1us; 指令周期1~4us; ①51單片機有兩組定時器/計數器,因為既可以定時,又可以計數,故稱之為定時器…

【藍牙】win11 筆記本電腦連接 hc-06

文章目錄 前言步驟 前言 使用電腦通過藍牙添加串口 步驟 設置 -> 藍牙和其他設備 點擊 顯示更多設備 更多藍牙設置 COM 端口 -> 添加 有可能出現卡頓,等待一會 傳出 -> 瀏覽 點擊添加 hc-06,如果沒有則點擊 再次搜索 確定 添加成…

Android切換語言不退出App

1.需求 實現用戶選擇語言(未點擊下一步),更新當前界面UI,點擊下一步后,更新App的語言,并進行保存。 實現目標: 1.設置App的語言,本地進行保存 2.updateResources更新本地語言配置…

一鍵獲取Linux主機配置信息shell腳本,含網卡詳情,網卡綁定等

cat > /tmp/get_os_info.sh <<"EOF"#!/bin/bashexport LANG=en_US.UTF-8# 如果 cat /proc/1/cgroup | grep docker | wc -l 大于0 或 systemd-detect-virt 返回 docker,則為 docker容器,# 如果 virt-what 返回 kvm或vmware或hyperv或xen、xen-hvm、lxc 或…

2 XDMA IP中斷

三種中斷 1. Legacy 定義&#xff1a;Legacy 中斷是傳統的中斷處理方式&#xff0c;使用物理中斷線&#xff08;例如 IRQ&#xff09;來傳遞中斷信號。缺點&#xff1a; 中斷線數量有限&#xff0c;通常為 16 條&#xff0c;限制了可連接設備的數量。中斷處理可能會導致中斷風…

【算法】時間復雜度以及O(N^2)的排序

目錄 1.常數時間的操作 2.時間復雜度 2.1.以選擇排序為例 2.2.O(n^2)從何而來 2.3.冒泡排序 2.3.1.抑或運算 2.4.插入排序 3.二分法 3.1.局部最小 4.遞歸 4.1.遞歸行為時間復雜度的估計 1.常數時間的操作 一個操作如果和樣本的數據量無關&#xff0c;每次都是固定時…

2021 年 3 月青少年軟編等考 C 語言五級真題解析

目錄 T1. 紅與黑思路分析T2. 密室逃脫思路分析T3. 求逆序對數思路分析T4. 最小新整數思路分析T1. 紅與黑 有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫一個程序,計算你總共能夠到達多少塊黑色的…

C# 或 .NetCore 如何使用 NPOI 導出圖片到 Excel 文件

今天在本文中&#xff0c;我們將嘗試使用NPOI庫將圖像插入到 Excel 文件的特定位置。請將以下邏輯添加到您的寫作方法中&#xff0c;在 Excel 文件中添加圖像&#xff08;JPEG、PNG&#xff09;,我已經有一個示例 jpeg 文件 - Read-write-excel-npoi.jpg &#xff0c;我們將嘗試…

【學習筆記】理解深度學習的基礎:機器學習

1. 機器學習基礎 1.1 機器學習的定義與重要性 定義&#xff1a;深度學習是機器學習的一種特定形式。為了深入理解深度學習&#xff0c;必須牢固掌握機器學習的基本原理。機器學習算法是一種能夠從數據中學習的算法&#xff0c;通過經驗E在任務T上提高性能度量P&#xff08;Mi…

Observability:將 OpenTelemetry 添加到你的 Flask 應用程序

作者&#xff1a;來自 Elastic jessgarson 待辦事項列表可以幫助管理與假期計劃相關的所有購物和任務。使用 Flask&#xff0c;你可以輕松創建待辦事項列表應用程序&#xff0c;并使用 Elastic 作為遙測后端&#xff0c;通過 OpenTelemetry 對其進行監控。 Flask 是一個輕量級…

使用Matplotlib顯示中文的方法

1 問題提出 使用圖1所示的代碼進行matplotlib繪圖時&#xff0c;因為其默認不支持中文&#xff0c;此時無法顯示正確內容&#xff0c;如圖2所示。 圖1 matplotlib繪圖繪圖代碼 圖2 matplotlib無法顯示中文 2 問題解決 2.1 設置全局字體 在圖1所示的代碼中&#xff0c;第13…

詳解opencv resize之INTER_LINEAR和INTER_AREA

一。先簡單介紹一下resize的用法 src&#xff1a;輸入圖&#xff0c; dst&#xff1a;輸出圖 dsize&#xff1a;輸出圖的寬高&#xff0c;如果dsize不為空&#xff08;即寬高都不是0&#xff09;&#xff0c;則以dsize為準進行resize。 fx, fy是放大縮小的比例&#xff0c;是…

UnityDemo-TheBrave-制作筆記

這是我跟著b站up主MStudio的視頻學習制作的&#xff0c;大體上沒有去做一些更新的東西&#xff0c;這里只是一個總的總結。在文章的最后&#xff0c;我會放上可以游玩該游戲的鏈接和exe可執行文件&#xff0c;不過沒有對游戲內容進行什么加工&#xff0c;只有基本的功能實現罷了…

使用LSTM預測股票收盤價

在金融數據預測中&#xff0c;LSTM&#xff08;長短期記憶網絡&#xff09;憑借其在時間序列數據建模中的優勢&#xff0c;成為了分析股票價格趨勢的熱門選擇。本篇博客將以完整的代碼實現為例&#xff0c;展示如何利用LSTM網絡對股票收盤價進行預測&#xff0c;并從數據處理到…

模擬SpringIOCAOP

一、IOC容器 Ioc負責創建&#xff0c;管理實例&#xff0c;向使用者提供實例&#xff0c;ioc就像一個工廠一樣&#xff0c;稱之為Bean工廠 1.1 Bean工廠的作用 先分析一下Bean工廠應具備的行為 1、需要一個獲取實例的方法&#xff0c;根據一個參數獲取對應的實例 getBean(…