当前位置: 首页 > 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 也是评价一个人计算机综合素养的重要指标之一。

(第一部分完)

http://www.lryc.cn/news/519025.html

相关文章:

  • GIC中断分组介绍(IMX6ull为例)
  • 计算机网络期末复习(知识点)
  • Apache XMLBeans 一个强大的 XML 数据处理框架
  • 飞凌嵌入式i.MX8M Mini核心板已支持Linux6.1
  • 【数据链电台】洛克希德·马丁(Lockheed Martin)
  • python关键字(保留字)用法、保留的标识符类(1)
  • Ubuntu平台虚拟机软件学习笔记
  • 【数据库系统概论】数据库恢复技术
  • R 语言科研绘图 --- 折线图-汇总
  • 基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
  • 工业 4G 路由器赋能远程医疗,守护生命线
  • Windows安装Ubuntu子系统图形化工具
  • MiniMind - 从0训练语言模型
  • sql正则表达
  • 基于华为Maas(大模型即服务)和开源的Agent三方框架构建AI聊天助手实践
  • 微信小程序——创建滑动颜色条
  • Qt官方下载地址
  • 网络-ping包分析
  • SEO内容优化:如何通过用户需求赢得搜索引擎青睐?
  • ubuntu22.04 的录屏软件有哪些?
  • Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓
  • 深入解析 Python 2 与 Python 3 的差异与演进
  • 后端:Spring(IOC、AOP)
  • 排序:插入、选择、交换、归并排序
  • 认识+安装ElasticSearch
  • 一个模块实现期货分钟 K 线计算、主连行情合成
  • PyTorch:.max(1)和.max(0)的使用
  • ASP.NET Core 中使用 Cookie 身份验证
  • Ollama私有化部署大语言模型LLM
  • 安卓app抓包总结(精)