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

文章目錄

  • S06L22 Search, Find, and Replace - Part One
    • 1 從光標位置起,正向定位到當前行的首個字符 b
    • 2 從光標位置起,反向查找某個字符
    • 3 重復上一次字符查找操作
    • 4 定位到目標字符的前一個字符
    • 5 單字符查找與 Vim 命令的組合
    • 6 跨行查找某字符串
    • 7 Vim 的增量查找
    • 8 Vim 搜索的高亮顯示
    • 9 全局搜索與替換的快速交替操作
    • 10 反向全局搜索
    • 11 查找光標所在的下一個單詞
    • 12 查找光標所在的上一個單詞
    • 13 全局搜索 motion 與 D 命令的組合應用
    • 14 全局搜索 motion 與 Y 命令及寄存器的組合應用

寫在前面
開年這幾天利用假期和難得的空閑時間,突擊翻完了李笑來的《自學是門手藝》,收獲很大。書中最后也提到了 Vim 的學習,覺得很有必要把這個專欄筆記整理完,爭取在春節前順利收官。本篇為第 6 章第 22 課的自學筆記,也是全套課程最為核心的幾節操作課,主要介紹文本的檢索、單詞單字的匹配以及常用的替換技巧,因時長限制,Jason 講師特地分為兩部分介紹。本課為第一部分,第 23 課為第二部分。知識點不僅密集而且應用靈活性極強,需要結合示例文件用心體會、反復練習,形成肌肉記憶。如果 Vim 真的有捷徑,那必定是大量實踐、反復琢磨這條路。


S06L22 Search, Find, and Replace - Part One

1 從光標位置起,正向定位到當前行的首個字符 b

FB(即 F + {char}

查找該行首個大寫字母 A:按 F + ShiftA

注意:f 鍵查找是 區分大小寫 的。

2 從光標位置起,反向查找某個字符

反向查找:ShiftF + {char}。例如,反向定位到光標左邊最近一個 z,按:ShiftF + Z

正向查找:forward search

反向查找:backward search / reverse search

3 重復上一次字符查找操作

正向重復查找,按 ;

反向重復查找,按 ,

4 定位到目標字符的前一個字符

正向:按 T + {char}

反向:按 ShiftT + {char}

例如,正向定位下一個 i 左邊(前一個)的字符:TI

再如,反向定位上一個 i 右邊(即反向的前一個)的字符:ShiftT + I

同理,可使用 ;, 分別重復定位到下一個 {char}、且在它前面(正向為左邊,反向為右邊)的那個字符。

注意,無論是 f 查找還是 t 查找,; 始終與上一次查找的方向保持一致;而 , 始終與上一次的方向相反。

此外,這兩類查找也支持數量詞 {count}。例如,從當前位置開始,正向查找當前行的第 2 個空格字符,需鍵入:2FSpace

【復習】

重復上一次 Vim 命令,用的是 .;而這里的 f 查找和 t 查找對應的是動作 motion,并且可能存在多個匹配項,所以只能按 ;, 進行正反向瀏覽。

與此同時,也正因為這些查找屬于 motion 動作,而非 command 命令,它們也可以和前面學過的其它 command 命令組合使用(如 c / d / y 命令等)

5 單字符查找與 Vim 命令的組合

對于下列文本內容:

Delete THIS<<--- word.

F + ShiftT 將光標定位到大寫字母 T 后,需要刪除字符 T(包含)到字符 w(不包含)之間的內容,至少有三種解決方案:

  • D + TW
  • D + FSpace
  • 還可以用前面介紹的 D + ShiftW

6 跨行查找某字符串

使用 / + {target_string}

例如:正向跨行查找字符串 and/ + and

正向快速匹配下一個目標,按:N

反向快速匹配,則按:ShiftN

一直按 N 匹配到當前文件的最后一個目標字符串后,再次按 NVim 會提示 search HIT BOTTOM, continuing at TOP,并將光標定位到文件第一處匹配項(反之亦然):

圖 22-1 跨行查找到最后一處關鍵字后,Vim 提示繼續查找將從文件開頭重新開始

【圖 22-1 跨行查找到最后一處關鍵字后,Vim 提示繼續查找將從文件開頭重新開始】

想要重新檢索其他字符串,鍵入 / + {new_string} 即可。

7 Vim 的增量查找

增量查找(incsearch,即 incremental search)Vim 中的一個配置項,啟用該配置項后,Vim 會在輸入搜索關鍵字的過程中,實時顯示最新的匹配結果。也就是說,可以看到搜索結果的 即時反饋,而不必等到輸完搜索字符串后再進行查找。

相關操作增量搜索命令
查看:set is? / :set incsearch?
開啟:set is / :set incsearch
關閉:set nois / :set noincsearch
切換:set is! / :set incsearch!

8 Vim 搜索的高亮顯示

搜索高亮顯示(hls,全稱 hlsearch,即 highlight search),默認關閉。開啟后,當前文件所有的匹配項都將高亮顯示,直到換成其他關鍵詞或者關閉高亮。相關配置命令如下:

相關操作高亮顯示命令
查看:set hls? / :set hlsearch?
開啟:set hls / :set hlsearch
關閉:set nohls / :set nohlsearch
切換:set hls! / :set hlsearch!
臨時關閉:nohls / :nohlsearch

注意:臨時關閉只對當前匹配結果生效;只要用 / 重新檢索,Vim 就會重新恢復高亮顯示。

關于 Vim 偏好的具體配置,后續還會重點介紹,這里暫不展開。

9 全局搜索與替換的快速交替操作

先用 /{keyword} 搜索,然后用 cw 等命令替換為其他關鍵詞;后續再通過 N. 快速定位、快速替換,實現快速交替操作。

例如:全文檢索 and 后,替換為 &,并利用 N. 實現快速交替執行。

10 反向全局搜索

反向搜索(backward search,或者 reverse search),使用:? + {keyword}

例如,從當前光標位置開始,反向檢索關鍵詞 is? + is

同理,重復下一個匹配項(即向上查找),使用 N;逆向操作使用 ShiftN(即向下查找)。

11 查找光標所在的下一個單詞

使用星號鍵 *

例如:光標定位到單詞 is 的任一字符上,鍵入 * 可以全局匹配到下一個單詞 is,繼續按 * 或者 N 可匹配下一處;上一處用 ShiftN

注意

* 只能匹配單詞 is,無法匹配像 episodesister 這樣關鍵詞出現在中間的情況,因為 * 表示匹配完整單詞(matching an entire word)。

12 查找光標所在的上一個單詞

使用 $,重復該操作,使用 $N;逆向操作仍然使用 ShiftN

13 全局搜索 motion 與 D 命令的組合應用

全局搜索本質上也屬于 motion 操作,因此同樣可以與 command 命令組合使用。例如,刪除當前光標到下一處 This(不含)之間的文本內容:

圖 2:全局搜索與命令的組合示例:刪除當前光標到 This 間的內容(操作前)

【圖 2:全局搜索與命令的組合示例:刪除當前光標到 This 間的內容(操作前)】

鍵入 D/ + This + Enter,得到如下結果:

圖 3:執行 D/This + Enter 后的最終結果

【圖 3:執行 D/This + Enter 后的最終結果】

14 全局搜索 motion 與 Y 命令及寄存器的組合應用

此外,也可以將組合操作的內容放入某個寄存器。

例如:將文件初始位置到下一個 z 之間的內容,存入寄存器 "a

操作前(光標位于起初位置):

圖 4:Y 命令 + 全局搜索 + 寄存器操作示例(操作前)

【圖 4:Y 命令 + 全局搜索 + 寄存器操作示例(操作前)】

依次鍵入 "AY/ + z + Enter,并查看寄存器 "a 的內容,得到如下結果:

圖 5:執行 "ay/z + Enter 操作后,查看寄存器 a 中的內容(操作成功)

【圖 5:執行 "ay/z + Enter 操作后,查看寄存器 a 中的內容(操作成功)】

后記
Vim 的使用我覺得是計算機領域少有的 “先易后難” 技能,為了今后的流暢體驗,現在苦一點累一點是非常值得的。能否熟練使用 Vim 也是評價一個人計算機綜合素養的重要指標之一。

(第一部分完)

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

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

相關文章

Python3 JSON

JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;易于人閱讀和編寫&#xff0c;同時也易于機器解析和生成。它基于JavaScript編程語言的一個子集&#xff0c;但JSON是獨立于語言的&#xff0c;很多編程語言都支持JSON格式數據的…

202406 青少年軟件編程等級考試C/C++ 二級真題答案及解析(電子學會)

第 1 題 冠軍魔術 2018年FISM(世界魔術大會)近景總冠軍簡綸廷的表演中有一個情節:以桌面上一根帶子為界,當他將紙牌從帶子的一邊推到另一邊時,紙牌會變成硬幣;把硬幣推回另一邊會變成紙牌。 這里我們假設紙牌會變成等量的硬幣,而硬幣變成紙牌時,紙牌的數量會加倍。那么…

springboot 默認的 mysql 驅動版本

本案例以 springboot 3.1.12 版本為例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 點擊 spring-…

計算機網絡(二)——物理層和數據鏈路層

一、物理層 1.作用 實現相信計算機節點之間比特流的透明傳輸&#xff0c;盡可能屏蔽具體傳輸介質和物理設備的差異。 2.數據傳輸單位 比特。 3.相關通信概念 ①信源和信宿&#xff1a;即信號的發送方和接收方。 ②數據&#xff1a;即信息的實體&#xff0c;比如圖像、視頻等&am…

sql server cdc漏掃數據

SQL Server的CDC指的是“變更數據捕獲”&#xff08;Change Data Capture&#xff09;。這是SQL Server數據庫提供的一項功能&#xff0c;能夠跟蹤并記錄對數據庫表中數據所做的更改。這些更改包括插入、更新和刪除操作。CDC可以捕獲這些變更的詳細信息&#xff0c;并使這些信息…

AI數字人+文旅:打造數字文旅新名片

在數字化浪潮的推動下&#xff0c;人工智能技術正以前所未有的速度滲透到我們生活的每一個角落。特別是在文化和旅游領域&#xff0c;AI數字人的出現&#xff0c;不僅為傳統文旅產業注入了新的活力&#xff0c;也為游客帶來了全新的體驗。 肇慶AI數字人——星湖 “星湖”是肇…

做一個 簡單的Django 《股票自選助手》顯示 用akshare 庫(A股數據獲取)

圖&#xff1a; 股票自選助手 這是一個基于 Django 開發的 A 股自選股票信息查看系統。系統使用 akshare 庫獲取實時股票數據&#xff0c;支持添加、刪除和更新股票信息。 功能特點 支持添加自選股票實時顯示股票價格和漲跌幅一鍵更新所有股票數據支持刪除不需要的股票使用中…

Protobuf編碼規則詳解

Protobuf編碼規則詳解 1 Message 結構1.1 tag1.1.1 字段編號(field_num)1.1.2 傳輸類型(wire_type) 1.2 字段順序1.3 默認值 2 編碼2.1 Varint編碼2.1.1 Varint編碼過程2.1.2解碼過程2.1.3 存儲2.1.4 小結2.2 有符號整數(sint32和sint64)編碼的問題與zigzag優化 3 編碼實踐3.1測…

系統思考與因果智慧

“眾生畏果&#xff0c;菩薩畏因”&#xff0c;這句話蘊藏著深厚的因果智慧&#xff0c;與系統思考不謀而合。 眾生畏果&#xff0c;體現了大多數人的行為模式&#xff1a;關注的是眼前的問題與結果&#xff0c;比如失敗、沖突、痛苦。正如在系統思考中&#xff0c;我們稱之為…

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 報錯內容&#xff1a; exec /entrypoint.sh: no such file or directory查看文件正常在此路徑&#xff0c;但是就是報錯沒找到。 可能是因為sh文件的換行符使用了win的。

計算機的錯誤計算(二百零七)

摘要 利用兩個數學大模型計算 arccot(0.125664e2)的值&#xff0c;結果保留16位有效數字。 實驗表明&#xff0c;它們的輸出中分別僅含有3位和1位正確數字。 例1. 計算 arccot(0.125664e2)的值&#xff0c;結果保留16位有效數字。 下面是與一個數學解題器的對話。 以上為與…

MCANet: 基于多模態字幕感知的大語言模型訓練無關視頻異常檢測

目錄 摘要01 引言02 相關工作2.1 視頻異常檢測2.2 基于視頻的大語言模型&#xff08;VLLMs&#xff09; 03 方法論3.1 問題定義3.2 MCANet3.3 圖像字幕分支3.4 音頻字幕分支3.5 基于LLM的異常評分3.6 視頻-文本分數優化 04 實驗4.1 數據集和評估指標4.2 實現細節4.3 定性結果4.…

WMS倉庫管理系統,Vue前端開發,Java后端技術源碼(源碼學習)

一、項目背景和建設目標 隨著企業業務的不斷擴展&#xff0c;倉庫管理成為影響生產效率、成本控制及客戶滿意度的重要環節。為了提升倉庫作業的透明度、準確性和效率&#xff0c;本方案旨在構建一套全面、高效、易用的倉庫管理系統&#xff08;WMS&#xff09;。該系統將涵蓋庫…

【Uniapp-Vue3】創建自定義頁面模板

大多數情況下我們都使用的是默認模板&#xff0c;但是默認模板是Vue2格式的&#xff0c;如果我們想要定義一個Vue3模板的頁面就需要自定義。 一、我們先復制下面的模板代碼&#xff08;可根據自身需要進行修改&#xff09;&#xff1a; <template><view class"…

【Go】:圖片上添加水印的全面指南——從基礎到高級特性

前言 在數字內容日益重要的今天&#xff0c;保護版權和標識來源變得關鍵。為圖片添加水印有助于聲明所有權、提升品牌認知度&#xff0c;并防止未經授權的使用。本文將介紹如何用Go語言實現圖片水印&#xff0c;包括靜態圖片和帶旋轉、傾斜效果的文字水印&#xff0c;幫助您有…

springCloudGateWay使用總結

1、什么是網關 功能: ①身份認證、權限驗證 ②服務器路由、負載均衡 ③請求限流 2、gateway搭建 2.1、創建一個空項目 2.2、引入依賴 2.3、加配置 3、斷言工廠 4、過濾工廠 5、全局過濾器 6、跨域問題

zig 安裝,Hello World 示例

1. 安裝 Zig 首先&#xff0c;你需要在你的計算機上安裝 Zig 編譯器。你可以從 Zig 官方網站 下載適合你操作系統的版本。 安裝完成后&#xff0c;你可以在終端中運行以下命令來檢查 Zig 是否安裝成功&#xff1a; zig version如果一切正常&#xff0c;它會顯示 Zig 的版本信…

【Docker】Docker與Docker compose離線安裝

文章目錄 一. 離線安裝1. 下載docker2. 安裝 二. 相關命令三. 配置docker-compose 一. 離線安裝 1. 下載docker wget https://download.docker.com/linux/static/stable/x86_64/docker-27.1.2.tgz wget https://download.docker.com/linux/static/stable/aarch64/docker-27.1…

【UE5 C++課程系列筆記】22——多線程基礎——FRunnable和FRunnableThread

目錄 1、FRunnable 1.1 概念 1.2 主要成員函數 &#xff08;1&#xff09;Init 函數 &#xff08;2&#xff09;Run 函數 &#xff08;3&#xff09;Stop 函數 &#xff08;4&#xff09;Exit 函數 2、FRunnableThread 2.1 概念 2.2 主要操作 &#xff08;1&#xff…

Vue重新加載子組件

背景&#xff1a;組件需要重新加載&#xff0c;即重新走一遍組件的生命周期常見解決方案&#xff1a; 使用v-if指令&#xff1a;v-if 可以實現 true (加載)和 false (卸載) async reloadComponent() {this.show false// 加上 nextTick this.$nextTick(function() {this.show…