【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…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...