【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象

文章目录

  • Section 7:Text Objects and Macros
    • S07L28 Text Objects
      • 1 文本对象的含义
      • 2 操作文本对象的基本语法
      • 3 操作光标所在的整个单词
      • 4 删除光标所在的整个句子
      • 5 操作光标所在的整个段落
      • 6 删除光标所在的中括号内的文本
      • 7 删除光标所在的小括号内的文本
      • 8 操作尖括号内的文本
      • 9 操作光标所在的标签文本
      • 10 操作大括号内的文本
      • 11 操作光标所在的各种括号内的文本
      • 12 本节思维导图

写在前面
本篇开始介绍 Vim 的另一类核心操作:文本对象与宏。这是筑牢 Vim 基础后真正开始为开发者提效的一章,也是 Vim 在文本编辑领域至今没有敌手的重要原因之一。只要你还在写 HTML、还需要修改配置文件、还需要一次性变更代码块中的文本,Vim 的操作效率就会秒杀其他文本工具,不仅可以摆脱对鼠标的依赖,甚至都不用把右手移到旁边的四个方向键。这样节约的时间看似微不足道,长期积累下来就非常可观了,甚至还可以缓解因为频繁操作鼠标导致的腱鞘炎。总之,Vim 的强大,谁用谁知道。

Section 7:Text Objects and Macros

S07L28 Text Objects


本节演示文件:vimclass/textobjects.txt

1 文本对象的含义

Vim 中的 文本对象(Text Objects)(又叫 逻辑区域(Logical Regions))主要包括:

  • 单词
  • 句子
  • 段落
  • 各种标点符号分隔的文本,如:
    • 引号(单引号、双引号)
    • 反引号
    • 大括号
    • HTML 标签

2 操作文本对象的基本语法

语法一:

{operator}{a}{object}

语法二:

{operator}{i}{object}

3 操作光标所在的整个单词

删除整个单词:

DAW:即 Delete A Word(带对象分隔符,A 表示 aroundall

更改整个单词:

CIW:即 Change Inner Word(不带对象分隔符,I 表示 inner

此外,{object} 指代 “单词” 时(即 wW)也有大小写的区别,主要体现在 对象分隔符 的认定上:

  • 小写形式(即 W):对象分隔符包括 标点符号空白字符
  • 大写形式(即 ShiftW):对象分隔符只包含 空白字符

4 删除光标所在的整个句子

句子(Sentence)对应的 {object}s,例如以下操作指令:

  • DAS:删除光标所在的一整句话,包括该句子的 句点位置,以及句点后面的空白字符
  • DIS:删除光标所在的一整句话,且仅删到句点位置(含)

此外,对于句子中出现换行的情况,Vim 也能自动视为同一句话,一并处理。例如,对于下列三句话,如果需要删除第二句,操作前如下所示(假设光标位于单词 multiple 上):

This is a sentence comprised of many words.  This is another sentence. A 
paragraph is made up of multiple sentences.  Just like this one!

执行操作 DAS,得到:

This is a sentence comprised of many words.  This is another sentence. Just like this one!

重复上述操作,还可以使用快捷键 .

5 操作光标所在的整个段落

Vim 中,一句话是以句点 . 结尾的;而一个段落则是用空行进行分隔的。段落对应的对象表示为 p,即段落的英文单词 paragraph 的首字母,相关操作如下(以 d 命令为例):

  • DAP:删除当前光标所在的一整段文本,以及该段落后面的空行。
  • DIP:仅删除当前光标所在的一整段文本,段落后面的空行不动。

6 删除光标所在的中括号内的文本

中括号对应的文本对象用 [] 表示,二者含义相同,都指代中括号圈定的文字,与 A 结合表示包含括号本身,与 I 组合则仅针对其中的文本。例如:

  • DA[DA]:删除当前光标所在的、由中括号圈定的文本内容,且包含中括号本身;
  • CI[CI]:更改当前光标所在的、由中括号圈定的文本内容,但保留中括号本身。

7 删除光标所在的小括号内的文本

Vim 中,小括号对应的文本对象用 () 表示;包含小括号用 a,不包含则与 i 组合。例如:

  • DA(DA):删除当前光标所在的小括号圈定的文本内容,且包括小括号本身一并删除。
  • DI(DI):删除当前光标所在的小括号圈定的文本内容,但保留小括号本身。

同时,小括号还可以用 b 表示,意指 block 区块,同时也省去了多按一次 Shift 键的麻烦。

8 操作尖括号内的文本

Vim 中,尖括号对应的文本对象用 <> 表示,包含则用 a,不包含与 i 组合。例如,对 <html> 作如下操作:

  • YA<YA>:复制(Yank)光标所在的尖括号圈定的文本,且包含尖括号本身(即复制 <html>);
  • YI<YI>:复制(Yank)光标所在的尖括号圈定的文本,但不包含尖括号本身(即复制 html);

9 操作光标所在的标签文本

Vim 中,标签对应的文本对象为 t(即 tag 的首字母)。包含标签与 a 组合,不包含则与 i 组合。例如,删除下列文本中 p 标签内的文字(不含 p 标签本身):

<p>This is <strong>so, so, very</strong> cool!</p>

DIT,得到:

<p></p>

注意

当标签只存在嵌套的其他标签时,光标必须正确定位,因为 t 只对当前光标所在的最近一层的标签生效。因此,如果光标位于 <strong> 内,则只对 <strong> 圈定的文字生效,而位于 p 内部、strong 外部的文字则不受影响。

此外,对于自定义的标签(如 XML 或自定义组件标签),atit 操作同样适用。

10 操作大括号内的文本

同理,大括号对应的文本对象用 {} 表示,且与 a 组合表示包含大括号本身,与 i 组合表示不包含大括号。与标签的情况类似,存在嵌套时,也仅对当前光标所在的最内层大括号生效。

同时,也可以用 B 表示大括号文本对象,与小括号的 b 相对。这里也体现了 Vim 的形象化思维:小括号用小写的 b 表示(即小写的 block 区块);大括号用大写的 B 表示(对应大写的 Block 区块)。

11 操作光标所在的各种括号内的文本

  • 双引号:A"I"
  • 单引号:A'I'
  • 反引号:A`I`

12 本节思维导图

本节思维导图

【图 28-1:本节思维导图】

后话
不得不佩服 Vim 对各种键位的天才设计思路,与英语的自然融合几乎不用去死记硬背这些组合键。很多人被 Vim 所谓的高门槛吓退,殊不知磨刀不误砍柴工。忽视这样先难后易、掌握后终身受用的硬核技能,也就是大部分人捡芝麻丢西瓜的倒置人生的真实写照。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2017.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Termora跨平台 SSH/SFTP/Terminal 客户端工具

前言 Termora一款强大的终端模拟与SSH客户端工具&#xff0c;集SFTP传输、跨平台兼容、Zmodem协议、SSH端口转发、配置同步、宏录制、关键词高亮、密钥管理、多会话命令发送及数据加密于一体&#xff0c;专为追求高效远程工作的您设计。无论是开发、管理还是日常任务&#xff…

音视频入门基础:RTP专题(1)——RTP官方文档下载

一、引言 实时传输协议&#xff08;Real-time Transport Protocol&#xff0c;简写RTP&#xff09;是一个网络传输协议&#xff0c;由IETF的多媒体传输工作小组1996年在《RFC 1889》中公布的。 RTP作为因特网标准在《RFC 3550》有详细说明。而《RFC 3551》详细描述了使用最小…

JVM之垃圾回收器ZGC概述以及垃圾回收器总结的详细解析

ZGC ZGC 收集器是一个可伸缩的、低延迟的垃圾收集器&#xff0c;基于 Region 内存布局的&#xff0c;不设分代&#xff0c;使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记压缩算法 在 CMS 和 G1 中都用到了写屏障&#xff0c;而 ZGC 用到了读屏障 染色指针&a…

Redis复制(replica)

Redis主从复制 [Redis主从复制]&#xff08;replica&#xff09;是一个多Redis实例进行数据同步的过程&#xff0c;其中一个实例是主实例&#xff08;Master&#xff09;&#xff0c;其他实例是从实例&#xff08;Slave&#xff09;。主实例负责处理命令请求&#xff0c;而从实…

React:构建用户界面的JavaScript库

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何使用 Excel 进行多元回归分析?

多元回归分析&#xff0c;一种统计方法&#xff0c;用来探索一个因变量&#xff08;即结果变量&#xff09;与多个自变量&#xff08;即预测变量&#xff09;之间的关系。广泛用于预测、趋势分析以及因果关系的分析。 听起来这个方法很复杂&#xff0c;但其实在 Excel 中可以很…

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…

PostgreSQL技术内幕22:vacuum full 和 vacuum

文章目录 0.简介1.概念及使用方式2.工作原理2.1 主要功能2.2 清理流程2.3 防止事务id环绕说明 3.使用建议 0.简介 在之前介绍MVCC文章中介绍过常见的MVCC实现的两种方式&#xff0c;一种是将旧数据放到回滚段&#xff0c;一种是直接生成一条新数据&#xff08;对于删除是不删除…

C#,图片分层(Layer Bitmap)绘制,反色、高斯模糊及凹凸贴图等处理的高速算法与源程序

1 图像反色Invert 对图像处理的过程中会遇到一些场景需要将图片反色&#xff0c;反色就是取像素的互补色&#xff0c;比如当前像素是0X00FFFF&#xff0c;对其取反色就是0XFFFFFF – 0X00FFFF 0XFF0000&#xff0c;依次对图像中的每个像素这样做&#xff0c;最后得到的就是原…

STM32 FreeRTOS 的任务挂起与恢复以及查看任务状态

目录 任务的挂起与恢复的API函数 任务挂起函数 任务恢复函数 任务恢复函数&#xff08;中断中恢复&#xff09; 函数说明 注意事项 查看任务状态 任务的挂起与恢复的API函数 vTaskSuspend()&#xff1a;挂起任务, 类似暂停&#xff0c;可恢复 vTaskResume()&#xff1a…

vscode 扩展Cline、Continue的差别?

Cline和Continue都是VSCode的AI编程插件&#xff0c;它们在功能、用户体验、性能、适用场景以及配置和使用步骤等方面存在一些差别&#xff1a; 一、功能差异 编辑功能 Cline&#xff1a;能够分析项目的文件结构和源代码抽象语法树&#xff08;AST&#xff09;&#xff0c;通…

Unity 3D游戏开发从入门进阶到高级

本文精心整理了Unity3D游戏开发相关的学习资料&#xff0c;涵盖入门、进阶、性能优化、面试和书籍等多个维度&#xff0c;旨在为Unity开发者提供全方位、高含金量的学习指南.欢迎收藏。 学习社区 Unity3D开发者 这是一个专注于Unity引擎的开发者社区&#xff0c;汇聚了众多Un…

LLM实现视频切片合成 前沿知识调研

1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…

1Hive概览

1Hive概览 1hive简介2hive架构3hive与Hadoop的关系4hive与传统数据库对比5hive的数据存储 1hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。 其本质是将SQL转换为MapReduce/Spark的任务进…

IDEA的Java注释在Toggle Rendered View下的字号调整方式

记录IntelliJ IDEA的Java注释在Toggle Rendered View下的字号调整方式 如图&#xff0c;在Toggle Rendered View模式下的注释字号很大&#xff0c;与代码不协调&#xff0c;在此区域点击鼠标右键&#xff0c;选中 Adjust 出现一个滑动条&#xff0c;通过拖动游标调整字号大小…

游戏市场成果及趋势

2024 年的游戏行业发展情况如何&#xff1f;这是一个既关系到开发商&#xff0c;又关系到玩家的问题&#xff0c;而市场分析师可以为我们揭晓答案。下面&#xff0c;就让我们来看看分析师给出的结论以及他们对未来趋势的预测。 玩家 自 2021 年起&#xff0c;全球平均游戏时间…

C++复习

注&#xff1a;本文章所写内容是小编复习所看的。记录的是一些之前模糊不清的知识点。详细c内容请移步至小编主页寻找。 竞赛小技巧 竞赛中cin/cout用不了&#xff08;没有办法刷新缓冲区&#xff0c;导致cin/cout与缓冲区绑定&#xff09; 解决办法&#xff1a;(加以下三行…

【C++】多线程

目录 多线程基础什么是线程线程和进程的关系线程的特点什么是多线程编程为什么要使用多线程线程与CPU的执行关系线程的生命周期 创建线程&#xff08;C11&#xff09;线程的可调用对象传参数 注意事项join和detach的区别一个线程包含什么东西this_thread 线程同步线程同步机制互…

《深度剖析算法优化:提升效率与精度的秘诀》

想象一下&#xff0c;你面前有一堆杂乱无章的数据&#xff0c;你需要从中找到特定的信息&#xff0c;或者按照一定的规则对这些数据进行排序。又或者&#xff0c;你要为一个物流公司规划最佳的配送路线&#xff0c;以降低成本和提高效率。这些问题看似复杂&#xff0c;但都可以…

怎么实现Redis的高可用?

大家好&#xff0c;我是锋哥。今天分享关于【怎么实现Redis的高可用&#xff1f;】面试题。希望对大家有帮助&#xff1b; 怎么实现Redis的高可用&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 为了实现 Redis 的高可用性&#xff0c;我们需要保证在发…