【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 匹配到当前文件的最后一个目标字符串后,再次按 N,Vim 会提示 search HIT BOTTOM, continuing at TOP,并将光标定位到文件第一处匹配项(反之亦然):

【图 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,无法匹配像episode、sister这样关键词出现在中间的情况,因为 * 表示匹配完整单词(matching an entire word)。
12 查找光标所在的上一个单词
使用 $,重复该操作,使用 $ 或 N;逆向操作仍然使用 ShiftN。
13 全局搜索 motion 与 D 命令的组合应用
全局搜索本质上也属于 motion 操作,因此同样可以与 command 命令组合使用。例如,删除当前光标到下一处 This(不含)之间的文本内容:

【图 2:全局搜索与命令的组合示例:删除当前光标到 This 间的内容(操作前)】
键入 D/ + This + Enter,得到如下结果:

【图 3:执行 D/This + Enter 后的最终结果】
14 全局搜索 motion 与 Y 命令及寄存器的组合应用
此外,也可以将组合操作的内容放入某个寄存器。
例如:将文件初始位置到下一个 z 之间的内容,存入寄存器 "a。
操作前(光标位于起初位置):

【图 4:Y 命令 + 全局搜索 + 寄存器操作示例(操作前)】
依次键入 "AY/ + z + Enter,并查看寄存器 "a 的内容,得到如下结果:

【图 5:执行 "ay/z + Enter 操作后,查看寄存器 a 中的内容(操作成功)】
后记
Vim的使用我觉得是计算机领域少有的 “先易后难” 技能,为了今后的流畅体验,现在苦一点累一点是非常值得的。能否熟练使用Vim也是评价一个人计算机综合素养的重要指标之一。
(第一部分完)
相关文章:
【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)
文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起,正向定位到当前行的首个字符 b2 从光标位置起,反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…...
GIC中断分组介绍(IMX6ull为例)
一、Cortex-A7内核中断 Cortex-A7内核具有多个中断类型,但其中最重要的是复位中断和IRQ(普通中断请求)中断。对于IMX6ULL而言,主要关注的是IRQ中断,因为外部设备和内部事件通常都会触发这类中断。 从左到右 中断控制…...
计算机网络期末复习(知识点)
概念题 在实际复习之前,可以看一下这个视频将网络知识串一下,以便更好地复习:【你管这破玩意叫网络?】 网络规模的分类 PAN(个人区域网络):用于个人设备间的连接,如手机与蓝牙耳机…...
Apache XMLBeans 一个强大的 XML 数据处理框架
Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架,它提供了一种方式将 XML Schema (XSD) 映射到 Java 类,从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…...
飞凌嵌入式i.MX8M Mini核心板已支持Linux6.1
飞凌嵌入式FETMX8MM-C核心板现已支持Linux6.1系统,此次升级不仅使系统功能更加丰富,还通过全新BSP实现了内存性能的显著提升。 基于NXP i.MX8M Mini处理器设计开发的飞凌嵌入式FETMX8MM-C核心板,拥有4个Cortex-A53高性能核和1个Cortex-M4实时…...
【数据链电台】洛克希德·马丁(Lockheed Martin)
洛克希德马丁公司(Lockheed Martin)是全球领先的航空航天、国防、先进技术和安全领域的供应商之一。 公司为美军及盟国军队提供了广泛的通信系统,包括数据链电台和相关的通信系统。 洛克希德马丁的许多产品用于战术通信、卫星通信、电子战、…...
python关键字(保留字)用法、保留的标识符类(1)
python关键字(保留字)用法、保留的标识符类(1) 一、python保留字(关键字) 1.1、python关键字 以下标识符为保留字,或称 关键字,不可用于普通标识符,即我们不能把它们用作任何标识符名称。 python 保留字(关键字) 关键…...
Ubuntu平台虚拟机软件学习笔记
Ubuntu平台上常见虚拟机软件 VirtualBox [Download]KVM/QEMU 1. VirtualBox 1.1 查看安装版本 VBoxManage -V2. KVM/QEMU KVM: Kernel-based Virtual Machine QEMU: Quick EMUlator 通义千问: virt-manager 既不是QEMU也不是KVM,而是用于管理和创建…...
【数据库系统概论】数据库恢复技术
目录 11.1 事务的基本概念 事务的定义 事务的开始与结束 事务的ACID特性 破坏ACID特性的因素 11.2 数据库恢复概述 11.3 故障的种类 1. 事务内部的故障 2. 系统故障 3. 介质故障 4. 计算机病毒 11.4 恢复的实现技术 如何建立冗余数据 数据转储 登记日志文件 11…...
R 语言科研绘图 --- 折线图-汇总
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
工业 4G 路由器赋能远程医疗,守护生命线
在医疗领域,尤其是偏远地区的医疗救治场景中,工业 4G 路由器正发挥着无可替代的关键作用,宛如一条坚韧的 “生命线”,为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏,常常面临着专业医生短缺、诊疗设备有限等困境…...
Windows安装Ubuntu子系统图形化工具
Windows如何使用WSL方式安装Ubuntu,可以参考:https://blog.csdn.net/xiangzhihong8/article/details/145044370。接下来,我们说一下如何安装Ubuntu的图形化系统。 为了测试,这里介绍两种常见的图形化工具。第一种为VcXsrv Gnome…...
MiniMind - 从0训练语言模型
文章目录 一、关于 MiniMind 📌项目包含 二、📌 Environment三、📌 Quick Start Test四、📌 Quick Start Train0、克隆项目代码1、环境安装2、如果你需要自己训练3、测试模型推理效果 五、📌 Data sources1、分词器&am…...
sql正则表达
MySQL中的正则表达式使用REGEXP关键字来指定匹配模式。常见的正则表达式符号包括: .:匹配任意单个字符 ^:匹配字符串的开始位置 $:匹配字符串的结束位置 *:匹配前面的字符或字符集出现零次或多次 :匹配前面…...
基于华为Maas(大模型即服务)和开源的Agent三方框架构建AI聊天助手实践
引言 随着人工智能技术的快速发展,AI聊天助手已经成为企业与用户之间沟通的重要桥梁。为了构建一个高效、智能且易于扩展的AI聊天助手,我们可以利用华为云提供的Maas(Model-as-a-Service,大模型即服务)平台,结合开源的Agent三方框架来实现。本文将详细介绍这一实践过程,…...
微信小程序——创建滑动颜色条
在微信小程序中,你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例,展示了如何实现一个颜色滑动条,该滑动条会根据滑动位置改变背景颜色。 步骤一:创建小程序项目 首先,使用微信开发者工具创建一个新…...
Qt官方下载地址
1. 最新版本 Qt官方最新版本下载地址:https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图: 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装,请转至此链接进行下载:https://download.qt.i…...
网络-ping包分析
-a:使 ping 在收到响应时发出声音(适用于某些操作系统)。-b:允许向广播地址发送 ping。-c count:指定发送的 ping 请求的数量。例如,ping -c 5 google.com 只发送 5 个请求。-i interval:指定两…...
SEO内容优化:如何通过用户需求赢得搜索引擎青睐?
在谷歌SEO优化中,内容一直是最重要的因素之一。但要想让内容真正发挥作用,关键在于满足用户需求,而不是简单地堆砌关键词。谷歌的算法越来越智能化,更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
