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

【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.kler.cn/a/488875.html

相关文章:

  • scrapy爬取图片
  • 项目管理之引论
  • 预测市场平台 Aegis:Al Agent + Web3,为预测市场提供新的动力
  • 【JAVA面试】基本类型与包装类型
  • 利用Python爬虫技术从义乌购获取商品列表
  • AIP-1 AIP目的和指南
  • npm i 报错
  • 获得PostgreSQL中级认证后,可以从事哪些工作岗位?
  • USB学习——基本概念
  • Objective-C语言的软件工程
  • 从excel提取和过滤数据到echarts中绘制图
  • vulnhub靶场【DC系列】之5
  • 开源cJson用法
  • 汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮
  • ARTS-01
  • 攻防世界 Web_php_wrong_nginx_config
  • 7.在 Vue 3 中使用 ECharts 实现动态散点图:完整教程与代码解析
  • 解决bazel构建的项目段错误时coredump调试问题
  • RabbitMQ基本介绍及简单上手
  • 中国科学院|PPTAgent:超越文本到幻灯片的演示文稿生成与评估