首页 > 其他分享 >【Vim Masterclass 笔记12】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象

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

时间:2025-01-14 17:28:21浏览次数:3  
标签:S07L28 所在 Vim 小括号 操作 文本 光标

文章目录

写在前面
本篇开始介绍 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 s    entence. 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 所谓的高门槛吓退,殊不知磨刀不误砍柴工。忽视这样先难后易、掌握后终身受用的硬核技能,也就是大部分人捡芝麻丢西瓜的倒置人生的真实写照。

标签:S07L28,所在,Vim,小括号,操作,文本,光标
From: https://blog.csdn.net/frgod/article/details/145136033

相关文章

  • 基于深度学习的手写文本识别系统
    文章目录前言一、准备二、(0-9)数字识别模型代码1.引入库2.读入数据3.模型训练4.模型测试5.模型权重保存(不用重复训练)6.交互式界面三、结果展示四、jupyter代码下载前言用chatgpt"实现基于深度学习的手写文本识别系统|Python,PyTorch":设计并实现了基于卷积神......
  • NLP 进阶:BERT + CNN 结合打造高效文本分类模型!
    引言:在自然语言处理(NLP)中,文本分类任务是一个核心问题,涵盖了情感分析、新闻分类、垃圾邮件检测等多个领域。传统的深度学习方法虽然取得了一定的成效,但随着BERT(BidirectionalEncoderRepresentationsfromTransformers)和CNN(ConvolutionalNeuralNetworks)技术的出现,文本分......
  • 使用VoyageAI进行高效文本嵌入与重新排序
    在自然语言处理(NLP)任务中,文本嵌入和重新排序是两项关键技术。VoyageAI提供了针对特定领域和公司的定制化嵌入模型,以提高检索质量。本文将详细讲解如何使用VoyageAI进行文本嵌入和重新排序。技术背景介绍文本嵌入是一种将文本转换为数值向量的方法,使其能够在机器学习模型......
  • 【linux】文件与目录命令 - vim
    文章目录1.基本用法2.常用参数3.用法举例4.多种模式5.注意事项vim是一款功能强大的文本编辑器,适用于代码编辑和日常文本处理。它是vi的增强版,支持多种模式(如普通模式、插入模式和命令模式)以及插件扩展。1.基本用法语法:vim[选项][文件]功能:编......
  • 文本预处理是指在将文本数据用于模型训练或分析之前,对其进行的一系列清洗、转换和处理
    文本预处理是指在将文本数据用于模型训练或分析之前,对其进行的一系列清洗、转换和处理操作。这些操作旨在消除文本中的噪声和不必要的信息,并将其转化为适合后续处理的格式。以下是文本预处理的一些常见方法:一、文本清洗去除HTML标记和特殊字符:移除文本中的HTML标签(如、等)......
  • 使用OpenAI API进行文本生成的实践指南
    在AI技术日新月异的发展中,文本生成已经成为一项重要应用。通过使用OpenAI的API,开发者可以轻松地实现复杂的文本生成任务。在本文中,我们将深入探讨如何使用OpenAIAPI进行文本生成,从技术背景、核心原理到实际代码实现,并结合应用场景提供实践建议。技术背景介绍文本生成是自......
  • 每天一个优秀提示词学习收藏 - 文本选题篇(三)
    ......
  • 实现单行文本居中和多行文本左对齐并超出显示"..."
    在前端开发中,你可以使用CSS来实现单行文本居中和多行文本左对齐并超出显示"..."的效果。以下是一个示例:<!DOCTYPEhtml><html><head><style>.single-line{text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.multi-line{......
  • Qwen2ForSequenceClassification文本分类实战和经验分享
    本文主要使用Qwen2ForSequenceClassification实现文本分类任务。文章首发于我的知乎:https://zhuanlan.zhihu.com/p/17468021019一、实验结果和结论这几个月,在大模型分类场景做了很多实验,攒了一点小小经验。1、短文本1)query情感分类,一般不如BERTps:结论和,https://segmentfault......
  • RAG中的文本切分策略详解
    RAG中的文本切分策略详解1.选择RAG中的文本切分策略1.1不同的文本切分策略1.CharacterTextSplitter-这是最简单的方法。它默认基于字符(默认为"")来切割,并且通过字符的数量来衡量块的长度2.RecursiveCharacterTextSplitter-基于字符列表拆分文本。3.-基......