【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…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...
GB/T 43887-2024 核级柔性石墨板材检测
核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标: 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...
GitHub 常见高频问题与解决方案(实用手册)
1.Push 提示权限错误(Permission denied) 问题: Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因: 没有配置 SSH key 或使用了 HTTPS 而没有权限…...
World-writable config file /etc/mysql/mysql.conf.d/my.cnf is ignored
https://stackoverflow.com/questions/53741107/mysql-in-docker-on-ubuntu-warning-world-writable-config-file-is-ignored 修改权限 -> 重启mysql # 检查字符集配置 SHOW VARIABLES WHERE Variable_name IN (character_set_server, character_set_database ); --------…...
