当前位置: 首页 > news >正文

【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 也是评价一个人计算机综合素养的重要指标之一。

(第一部分完)

相关文章:

【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)

文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起&#xff0c;正向定位到当前行的首个字符 b2 从光标位置起&#xff0c;反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…...

GIC中断分组介绍(IMX6ull为例)

一、Cortex-A7内核中断 Cortex-A7内核具有多个中断类型&#xff0c;但其中最重要的是复位中断和IRQ&#xff08;普通中断请求&#xff09;中断。对于IMX6ULL而言&#xff0c;主要关注的是IRQ中断&#xff0c;因为外部设备和内部事件通常都会触发这类中断。 从左到右 中断控制…...

计算机网络期末复习(知识点)

概念题 在实际复习之前&#xff0c;可以看一下这个视频将网络知识串一下&#xff0c;以便更好地复习&#xff1a;【你管这破玩意叫网络&#xff1f;】 网络规模的分类 PAN&#xff08;个人区域网络&#xff09;&#xff1a;用于个人设备间的连接&#xff0c;如手机与蓝牙耳机…...

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架&#xff0c;它提供了一种方式将 XML Schema (XSD) 映射到 Java 类&#xff0c;从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…...

飞凌嵌入式i.MX8M Mini核心板已支持Linux6.1

飞凌嵌入式FETMX8MM-C核心板现已支持Linux6.1系统&#xff0c;此次升级不仅使系统功能更加丰富&#xff0c;还通过全新BSP实现了内存性能的显著提升。 基于NXP i.MX8M Mini处理器设计开发的飞凌嵌入式FETMX8MM-C核心板&#xff0c;拥有4个Cortex-A53高性能核和1个Cortex-M4实时…...

【数据链电台】洛克希德·马丁(Lockheed Martin)

洛克希德马丁公司&#xff08;Lockheed Martin&#xff09;是全球领先的航空航天、国防、先进技术和安全领域的供应商之一。 公司为美军及盟国军队提供了广泛的通信系统&#xff0c;包括数据链电台和相关的通信系统。 洛克希德马丁的许多产品用于战术通信、卫星通信、电子战、…...

python关键字(保留字)用法、保留的标识符类(1)

python关键字(保留字)用法、保留的标识符类&#xff08;1&#xff09; 一、python保留字(关键字) 1.1、python关键字 以下标识符为保留字&#xff0c;或称 关键字&#xff0c;不可用于普通标识符&#xff0c;即我们不能把它们用作任何标识符名称。 python 保留字(关键字) 关键…...

Ubuntu平台虚拟机软件学习笔记

Ubuntu平台上常见虚拟机软件 VirtualBox [Download]KVM/QEMU 1. VirtualBox 1.1 查看安装版本 VBoxManage -V2. KVM/QEMU KVM: Kernel-based Virtual Machine QEMU: Quick EMUlator 通义千问&#xff1a; virt-manager 既不是QEMU也不是KVM&#xff0c;而是用于管理和创建…...

【数据库系统概论】数据库恢复技术

目录 11.1 事务的基本概念 事务的定义 事务的开始与结束 事务的ACID特性 破坏ACID特性的因素 11.2 数据库恢复概述 11.3 故障的种类 1. 事务内部的故障 2. 系统故障 3. 介质故障 4. 计算机病毒 11.4 恢复的实现技术 如何建立冗余数据 数据转储 登记日志文件 11…...

R 语言科研绘图 --- 折线图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

基于 Python 和 OpenCV 的人脸识别上课考勤管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

工业 4G 路由器赋能远程医疗,守护生命线

在医疗领域&#xff0c;尤其是偏远地区的医疗救治场景中&#xff0c;工业 4G 路由器正发挥着无可替代的关键作用&#xff0c;宛如一条坚韧的 “生命线”&#xff0c;为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏&#xff0c;常常面临着专业医生短缺、诊疗设备有限等困境…...

Windows安装Ubuntu子系统图形化工具

Windows如何使用WSL方式安装Ubuntu&#xff0c;可以参考&#xff1a;https://blog.csdn.net/xiangzhihong8/article/details/145044370。接下来&#xff0c;我们说一下如何安装Ubuntu的图形化系统。 为了测试&#xff0c;这里介绍两种常见的图形化工具。第一种为VcXsrv Gnome…...

MiniMind - 从0训练语言模型

文章目录 一、关于 MiniMind &#x1f4cc;项目包含 二、&#x1f4cc; Environment三、&#x1f4cc; Quick Start Test四、&#x1f4cc; Quick Start Train0、克隆项目代码1、环境安装2、如果你需要自己训练3、测试模型推理效果 五、&#x1f4cc; Data sources1、分词器&am…...

sql正则表达

MySQL中的正则表达式使用REGEXP关键字来指定匹配模式。常见的正则表达式符号包括&#xff1a; .&#xff1a;匹配任意单个字符 ^&#xff1a;匹配字符串的开始位置 $&#xff1a;匹配字符串的结束位置 *&#xff1a;匹配前面的字符或字符集出现零次或多次 &#xff1a;匹配前面…...

基于华为Maas(大模型即服务)和开源的Agent三方框架构建AI聊天助手实践

引言 随着人工智能技术的快速发展,AI聊天助手已经成为企业与用户之间沟通的重要桥梁。为了构建一个高效、智能且易于扩展的AI聊天助手,我们可以利用华为云提供的Maas(Model-as-a-Service,大模型即服务)平台,结合开源的Agent三方框架来实现。本文将详细介绍这一实践过程,…...

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

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

Qt官方下载地址

1. 最新版本 Qt官方最新版本下载地址&#xff1a;https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图&#xff1a; 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装&#xff0c;请转至此链接进行下载&#xff1a;https://download.qt.i…...

网络-ping包分析

-a&#xff1a;使 ping 在收到响应时发出声音&#xff08;适用于某些操作系统&#xff09;。-b&#xff1a;允许向广播地址发送 ping。-c count&#xff1a;指定发送的 ping 请求的数量。例如&#xff0c;ping -c 5 google.com 只发送 5 个请求。-i interval&#xff1a;指定两…...

SEO内容优化:如何通过用户需求赢得搜索引擎青睐?

在谷歌SEO优化中&#xff0c;内容一直是最重要的因素之一。但要想让内容真正发挥作用&#xff0c;关键在于满足用户需求&#xff0c;而不是简单地堆砌关键词。谷歌的算法越来越智能化&#xff0c;更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; 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 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...