【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.rhkb.cn/news/505866.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 SQL 和表格数据进行问答和 RAG(7)—将表格数据(CSV 或 Excel 文件)加载到向量数据库(ChromaDB)中

将表格数据&#xff08;CSV 或 Excel 文件&#xff09;加载到向量数据库&#xff08;ChromaDB&#xff09;中。这里定义的类 PrepareVectorDBFromTabularData&#xff0c;它的主要功能是读取表格数据文件到DataFrame中、生成嵌入向量、并将这些数据存储在向量数据库的集合中&am…

【git】-2 分支管理

目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 ​​​​​​【git】-初始gi…

搜广推面经五

饿了么推荐算法 一、介绍InfoNCE Loss、InfoNCE温度系数的作用 InfoNCE Loss&#xff08;Information Noise Contrastive Estimation Loss&#xff09;是一种常用于自监督学习和对比学习中的损失函数&#xff0c;特别是在信息论和无监督学习中有广泛应用。 它的核心思想是通过…

如何选择适合的证件照制作软件,让您的照片制作更轻松

在当今数字化的时代&#xff0c;制作证件照不再需要专门前往照相馆。选择一款合适的证件照制作软件&#xff0c;您可以在家中轻松完成标准证件照的拍摄与制作。然而&#xff0c;面对市面上琳琅满目的软件&#xff0c;找到最适合您需求的软件并不简单。本文将为您详细介绍选择证…

【数据库】一、数据库系统概述

文章目录 一、数据库系统概述1 基本概念2 现实世界的信息化过程3 数据库系统内部体系结构4 数据库系统外部体系结构5 数据管理方式 一、数据库系统概述 1 基本概念 数据&#xff1a;描述事物的符号记录 数据库&#xff08;DB&#xff09;&#xff1a;长期存储在计算机内的、…

安卓硬件加速hwui

安卓硬件加速 本文基于安卓11。 从 Android 3.0 (API 级别 11) 开始&#xff0c;Android 2D 渲染管道支持硬件加速&#xff0c;这意味着在 View 的画布上执行的所有绘图操作都使用 GPU。由于启用硬件加速所需的资源增加&#xff0c;你的应用程序将消耗更多内存。 软件绘制&am…

第R4周:LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、代码流程1、导入包&#xff0c;设置GPU2、导入数据3、数据集可视化4、数据集预处理5、设置X&#xff0c;y6、划分数据集7、构建模型8、定义训练函…

Spring 设计模式:经典设计模式

Spring 设计模式&#xff1a;经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用&#xff0c;开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…

现代企业架构白皮书(可以在线阅读完整PDF文件)

数据架构元模型综述 数据架构的内容元模型包括“结构”、“端口”两个部分&#xff0c;如下图所示&#xff1a; 结构部分用来对数据模型、数据处理建模&#xff0c;其中包括数据对象、数据组件 端口部分用来对数据模型的边界建模&#xff0c;其中包括数据服务 数据架构元模型…

krpano 实现文字热点中的三角形和竖杆

krpano 实现文字热点中的三角形和竖杆 实现文字热点中的三角形和竖杆 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 实现文字热点中的三角形和竖杆 上图看效果 v&#xff1a;2549789059

Win10本地部署大语言模型ChatGLM2-6B

鸣谢《ChatGLM2-6B&#xff5c;开源本地化语言模型》作者PhiltreX 作者显卡为英伟达4060 安装程序 打开CMD命令行&#xff0c;在D盘新建目录openai.wiki if not exist D:\openai.wiki mkdir D:\openai.wiki 强制切换工作路径为D盘的openai.wiki文件夹。 cd /d D:\openai.wik…

互联网架构变迁:从 TCP/IP “呼叫” 到 NDN “内容分发” 的逐浪之旅

本文将给出关于互联网架构演进的一个不同视角。回顾一下互联网的核心理论基础产生的背景&#xff1a; 左边是典型的集中控制通信网络&#xff0c;很容易被摧毁&#xff0c;而右边的网络则没有单点问题&#xff0c;换句话说它很难被全部摧毁&#xff0c;与此同时&#xff0c;分…

priority_queue优先队列

目录 1. 最短路径算法&#xff08;Dijkstra算法&#xff09; 应用场景&#xff1a; 优先队列的作用&#xff1a; 2. 最小生成树算法&#xff08;Prim算法&#xff09; 应用场景&#xff1a; 优先队列的作用&#xff1a; 3. 哈夫曼编码&#xff08;Huffman Coding&#x…

vs2022编译webrtc步骤

1、主要步骤说明 概述&#xff1a;基础环境必须有&#xff0c;比如git&#xff0c;Powershell这些&#xff0c;就不写到下面了。 1.1 安装vs2022 1、选择使用C的桌面开发 2、 Windows 10 SDK安装10.0.20348.0 3、勾选MFC及ATL这两项 4、 安装完VS2022后&#xff0c;必须安…

如何评价deepseek-V3 VS OpenAI o1 自然语言处理成Sql的能力

DeepSeek-V3 介绍 在目前大模型主流榜单中&#xff0c;DeepSeek-V3 在开源模型中位列榜首&#xff0c;与世界上最先进的闭源模型不分伯仲。 准备工作&#xff1a; 笔者只演示实例o1 VS DeepSeek-V3两个模型&#xff0c;大家可以自行验证结果或者实验更多场景&#xff0c;同时…

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客&#xff0c;作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为&#xff1a; 2.vs…

Mysql--基础篇--多表查询(JOIN,笛卡尔积)

在MySQL中&#xff0c;多表查询&#xff08;也称为联表查询或JOIN操作&#xff09;是数据库操作中非常常见的需求。通过多表查询&#xff0c;你可以从多个表中获取相关数据&#xff0c;并根据一定的条件将它们组合在一起。MySQL支持多种类型的JOIN操作&#xff0c;每种JOIN都有…

gesp(C++四级)(11)洛谷:B4005:[GESP202406 四级] 黑白方块

gesp(C四级)&#xff08;11&#xff09;洛谷&#xff1a;B4005&#xff1a;[GESP202406 四级] 黑白方块 题目描述 小杨有一个 n n n 行 m m m 列的网格图&#xff0c;其中每个格子要么是白色&#xff0c;要么是黑色。对于网格图中的一个子矩形&#xff0c;小杨认为它是平衡的…

易于上手难于精通---关于游戏性的一点思考

1、小鸟、狙击、一闪&#xff0c;都是通过精准时机来逼迫玩家练习&#xff0c; 而弹道、出招时机等玩意&#xff0c;不是那么容易掌握的&#xff0c;需要反复的观察、反应与行动&#xff0c; 这也正是游戏性的体现&#xff0c; 玩家能感觉到一些朦胧的东西&#xff0c;但又不…

微信小程序——创建滑动颜色条

在微信小程序中&#xff0c;你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例&#xff0c;展示了如何实现一个颜色滑动条&#xff0c;该滑动条会根据滑动位置改变背景颜色。 步骤一&#xff1a;创建小程序项目 首先&#xff0c;使用微信开发者工具创建一个新…