【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.mzph.cn/bicheng/68450.shtml

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

相关文章

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Transformer-LSTMNSGAII多目标优化算法&#xff0c;工艺参数优化、工程设计优化&#xff01;&#xff08;Matlab完整源码和数据&#xff09; Transformer-LSTM模型的架构&#xff1a;输入层&#xff1a;多个变量作…

SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门

本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现&#xff0c;并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架&#xff0c;帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 ​编辑 …

跨境电商使用云手机用来做什么呢?

随着跨境电商的发展&#xff0c;越来越多的卖家开始尝试使用云手机来协助他们的业务&#xff0c;这是因为云手机具有许多优势。那么&#xff0c;具体来说&#xff0c;跨境电商使用云手机可以做哪些事情呢&#xff1f; &#xff08;一&#xff09;实现多账号登录和管理 跨境电商…

一体机cell服务器更换内存步骤

一体机cell服务器更换内存步骤&#xff1a; #1、确认grdidisk状态 cellcli -e list griddisk attribute name,asmmodestatus,asmdeactivationoutcome #2、offline griddisk cellcli -e alter griddisk all inactive #3、确认全部offline后进行关机操作 shutdown -h now #4、开…

“AI开放式目标检测系统:开启智能识别新时代

嘿&#xff0c;朋友们&#xff01;今天咱们来聊聊一个超酷炫的技术——AI开放式目标检测系统。这可不是什么高大上、遥不可及的玩意儿&#xff0c;它已经悄悄地走进了我们的生活&#xff0c;改变着我们对世界的认知和互动方式呢。 先来说说&#xff0c;什么是AI开放式目标检测系…

【鱼皮大佬API开放平台项目】Spring Cloud Gateway HTTPS 配置问题解决方案总结

问题背景 项目架构为前后端分离的微服务架构&#xff1a; 前端部署在 8000 端口API 网关部署在 9000 端口后端服务包括&#xff1a; api-backend (9001端口)api-interface (9002端口) 初始状态&#xff1a; 前端已配置 HTTPS&#xff08;端口 8000&#xff09;后端服务未配…

【游戏设计原理】68 - 玩家错误

一、错误类型 玩家错误类型 行为错误&#xff08;performance errors&#xff09;和运动控制错误&#xff08;motor control errors&#xff09;是玩家在游戏中常犯的错误。 运动控制错误 错误发生在玩家协调或掌握输入设备时&#xff0c;可能包括不小心按错键或未能及时把握战…

2.使用Spring BootSpring AI快速构建AI应用程序

Spring AI 是基于 Spring Boot3.x 框架构建&#xff0c;Spring Boot官方提供了非常便捷的工具Spring Initializr帮助开发者快速的搭建Spring Boot应用程序,IDEA也集成了此工具。本文使用的开发工具IDEASpring Boot 3.4Spring AI 1.0.0-SNAPSHOTMaven。 1.创建Spring Boot项目 …

Ubuntu离线docker compose安装DataEase 2.10.4版本笔记

1、先准备一个可以正常上网的相同版本的Ubuntu系统&#xff0c;可以使用虚拟机。Ubuntu系统需要安装好docker compose或docker-compose 2、下载dataease-online-installer-v2.10.4-ce.tar在线安装包&#xff0c;解压并执行install.sh进行安装和启动 3、导出docker镜像 sudo d…

【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的

SSMS 20在连接Sql server 2022数据库时有如下报错&#xff1a; A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…

LSA更新、撤销

LSA的新旧判断&#xff1a; 1.seq&#xff0c;值越大越优先 2.chksum&#xff0c;值越大越优先 3.age&#xff0c;本地的LSA age和收到的LSA age作比较 如果差值<900s&#xff0c;认为age一致&#xff0c;保留本地的&#xff1a;我本地有一条LSA是100 你给的是400 差值小于…

【FlutterDart】MVVM(Model-View-ViewModel)架构模式例子-dio版本(31 /100)

动图更精彩 dio & http 在Flutter中&#xff0c;dio和http是两个常用的HTTP请求库&#xff0c;它们各有优缺点。以下是对这两个库的详细对比&#xff1a; 功能特性 http&#xff1a; 功能&#xff1a;提供了基本的HTTP请求和响应功能&#xff0c;如GET、POST、PUT、DELE…

递归40题!再见递归

简介&#xff1a;40个问题&#xff0c;有难有易&#xff0c;均使用递归完成&#xff0c;需要C/C的指针、字符串、数组、链表等基础知识作为基础。 1、数字出现的次数 由键盘录入一个正整数&#xff0c;求该整数中每个数字出现的次数。 输入&#xff1a;19931003 输出&#xf…

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

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

openharmony标准系统方案之瑞芯微RK3568移植案例

标准系统方案之瑞芯微RK3568移植案例 ​本文章是基于瑞芯微RK3568芯片的DAYU200开发板&#xff0c;进行标准系统相关功能的移植&#xff0c;主要包括产品配置添加&#xff0c;内核启动、升级&#xff0c;音频ADM化&#xff0c;Camera&#xff0c;TP&#xff0c;LCD&#xff0c…

sunrays-framework 微调

文章目录 1.common-log4j2-starter 动态获取并打印日志存储的根目录的绝对路径以及应用的访问地址1.目录2.log4j2.xml 配置LOG_HOME3.LogHomePrinter.java 配置监听器4.spring.factories 注册监听器5.测试1.common-log4j2-starter-demo 配置2.启动测试 2.common-minio-starter …

ElasticSearch上

安装ElasticSearch Lucene&#xff1a;Java语言的搜索引擎类库&#xff0c;易扩展&#xff1b;高性能&#xff08;基于倒排索引&#xff09;Elasticsearch基于Lucene&#xff0c;支持分布式&#xff0c;可水平扩展&#xff1b;提供Restful接口&#xff0c;可被任何语言调用Ela…

element-ui textarea备注 textarea 多行输入框

发现用这个组件&#xff0c;为了给用户更好的体验&#xff0c;要加下属性 1. 通过设置 autosize 属性可以使得文本域的高度能够根据文本内容自动进行调整&#xff0c;并且 autosize 还可以设定为一个对象&#xff0c;指定最小行数和最大行数。:autosize"{ minRows: 3, ma…

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务&#xff0c;可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器&#xff0c;或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…

路由环路的产生原因与解决方法(1)

路由环路 路由环路就是数据包不断在这个网络传输&#xff0c;始终到达不了目的地&#xff0c;导致掉线或者网络瘫痪。 TTL &#xff08;生存时间&#xff09;&#xff1a;数据包每经过一个路由器的转发&#xff0c;其数值减1&#xff0c;当一个数据包的TTL值为0是&#xff0c;路…