【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)

news2025/1/16 0:53:53

文章目录

  • L29 Exercise 08 - Text Objects
    • 1 训练目标
    • 2 操作指令
      • 2.1. 打开 textobjectspractice.txt 文件
      • 2.2. 单词对象练习 Word Objects
      • 2.3. 区块对象 `( )` 练习 Block Object ( )
      • 2.4. 引用字符串练习 Quoted Strings
      • 2.5. 区块对象 `[ ]` 练习 Block Object [ ]
      • 2.6. 区块对象 `< >` 练习 Block Object < >
      • 2.7. 标签对象练习 Tag Objects
      • 2.8. 区块对象 `{ }` 练习 Block Object { }
      • 2.9. 句子对象练习 Sentence Objects
      • 2.10. 段落对象练习 Paragraph Objects
    • 3 退出 Vim
  • S07L30 Exercise 08 - Text Objects - Walkthrough 练习点评课

写在前面
本篇为上节课 Vim 文本对象操作的同步练习,已根据英文表述进行了全文翻译,方便今后快速查找、练习。从文本的增删改、再到上一章的查找检索替换、再到本节的文本对象操作,每一部分要么讲解十分详细,要么加大练习量,足以看出这些知识点在 Vim 中的核心地位。这就是刻意思考后的刻意练习,望各位着眼长远,且行且珍惜。

L29 Exercise 08 - Text Objects


1 训练目标

熟悉 Vim 中的各类文本对象。1

2 操作指令

2.1. 打开 textobjectspractice.txt 文件

Vim 打开源码包内的练习文件 textobjectspractice.txt(默认解压到 Downloads 文件夹下):

cd Downloads
cd vimclass
vim textobjectspractice.txt

2.2. 单词对象练习 Word Objects

将光标定位到首行单词 Time 的任意位置,例如按 FI 定位到最近的 i 字符下。然后按 DAW 删除该单词。注意观察,此时整个单词都被删除了,与使用 DW 删除的结果不同。

接下来再将单词 Traveller 改为 tourist。具体做法:用 CIW 更改内部单词(inner word),然后输入 tourist。最后按 Escape 键返回常规模式。

2.3. 区块对象 ( ) 练习 Block Object ( )

W 将光标移至左小括号位置,然后将括号内的文本改为 as we will call him。具体做法:按 CI(CI) 变更该区块内的文字内容。注意观察,此时光标刚好位于小括号内,接着输入 as we will call him,再按 Escape 键返回常规模式。

此时文档第一行如下所示:

The tourist (as we will call him) was expounding.

再定位到如下文本行,并令光标处于小括号内部、或就在小括号上:

print("The weatherman said, 'This weekend will be warm,' but that was a lie.")

这是其中一种实现方案:按 /( + Enter。接着,试通过三个字符的组合命令删除小括号这一整块内容(即 ("The weatherman said, 'This weekend will be warm,' but that was a lie."))。该命令为 DA( 或者 DA)

2.4. 引用字符串练习 Quoted Strings

光标移至下一行,并将其定位到双引号内的任意位置(例如使用 /" + Enter)。然后将下列文字:

print("The weatherman said, 'This weekend will be warm,' but that was a lie.")

改为:

print("It was cold!")

具体做法:键入 CI",并输入 It was cold!,再按 Escape 键返回常规模式。

接着移至下一行,这次需要将单引号内的文字由 'This weekend will be warm,' 改为 'It is hot outside,'。为此,先用 / + Enter 进行正向搜索,然后输入 CI,并将原文本改为 It is hot outside,。最后按 Escape 键返回常规模式。

2.5. 区块对象 [ ] 练习 Block Object [ ]

快速删除下列括号内所有文字内容。这是删除前的原始文本:

scripts=[ 'bin/backup',
          'bin/backup-all',
          'bin/backup-db-only',
          'bin/backup-files-only' ]

删除后将变为:

scripts=[]

先将光标定位到括号内的任意位置,例如通过检索 bin 实现:执行命令 /bin + Enter。然后,按 DI[ 或者 DI] 删除方括号内的所有内容。

2.6. 区块对象 < > 练习 Block Object < >

JJ 将光标移至如下这行:

<yank_me>

接着,将尖括号内的文本复制到 "i 寄存器中。具体做法:输入 "iyi> 或者 "iyi<。然后查看寄存器 "i 中的内容是否为 yank_me,方法是:输入命令 :reg i + Enter

然后,再连同尖括号本身,将文本 <yank_me> 复制后存入寄存器 "a。具体做法:输入命令 "aya<"aya>,并通过命令 :reg a + Enter 进行确认,看看寄存器中的内容是否为 <yank_me>

2.7. 标签对象练习 Tag Objects

试将下列文本行中的 Linux Training Academy 改为 LTA。改动前的原始文本如下:

<p><a href="https://linuxtrainingacademy.com">Linux Training Academy</a></p>

这是变更后的效果:

<p><a href="https://linuxtrainingacademy.com">LTA</a></p>

注意观察,目标文本位于 HTML 标签 <a> 内部。为此,需要先将光标定位到 <a> 标签内,例如通过 /H + Enter 实现。然后按 CIT,即在标签内变更内容(change inside tag),然后输入 LTA + Escape

下一段练习文本是 XML 格式的,改动前如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
  <CD>
    <TITLE>Jazz At Massey Hall</TITLE>
    <ARTIST>The Quintet</ARTIST>
  </CD>
  <CD>
    <TITLE>Blue Train</TITLE>
    <ARTIST>John Coltrane</ARTIST>
  </CD>
  <CD>
    <TITLE>Saxophone Colossus</TITLE>
    <ARTIST>Sonny Rollins</ARTIST>
  </CD>
</CATALOG>

试将 CATALOG 中标题为 Jazz At Massey Hall 的 CD 条目完整删除,改动后的效果如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
  <CD>
    <TITLE>Blue Train</TITLE>
    <ARTIST>John Coltrane</ARTIST>
  </CD>
  <CD>
    <TITLE>Saxophone Colossus</TITLE>
    <ARTIST>Sonny Rollins</ARTIST>
  </CD>
</CATALOG>

要删除 <CD> 标签,需要先将光标定位到包含 Jazz At Massey Hall 的条目对应的 <CD></CD> 位置。接着输入 DAT,表示删除该标签(delete a tag)。注意:如果光标定位到其他地方,可能只会删除内部嵌套的标签 <TITLE> 或者 <ARTIST>,而不是题目要求的整个 <CD> 标签。

2.8. 区块对象 { } 练习 Block Object { }

试对如下这段文字进行相关文本对象操作:

musicians = {
  'Charlie Parker': 'alto sax',
  'John Coltrane': 'tenor sax',
  'Sonny Rollins': 'tenor sax'
}

使其最终变为:

musicians = { }

具体做法:先将光标定位到 { } 区块的任意位置,例如检索关键字 alto,键入命令 /ALTO + Enter。然后输入 DI{DI} 删除该区块内的文本,此处光标应位于下列内容所示的右大括号 } 位置:

musicians = {
}

K 令光标上移一行,然后按 ShiftJ 合并这两行即可。

2.9. 句子对象练习 Sentence Objects

复制下列句子内容并存入寄存器 "s 中。将光标定位到这句话的任意位置:

Praesent rutrum purus ultricies, dignissim massa id, elementum felis.

注意观察,这句话并不是真正意义上的句子。切记,Vim 关注的是文本对象的边界,而非边界内的文字内容。句子是通过是否由标点符号 .! 或者 ? 结尾判定的。后面可以紧跟一个行终止符(the end of a line)或者一个空格或制表符。

"SYAS 将这句文本复制到寄存器 "s 中,并通过命令 :reg s + Enter 进行确认。

2.10. 段落对象练习 Paragraph Objects

DAP 删除整个段落。

3 退出 Vim

若要放弃文件变更以便下次重新练习,使用退出命令 :q! + Enter


S07L30 Exercise 08 - Text Objects - Walkthrough 练习点评课

无增补知识点,多思多练即可。


  1. 本节练习另附精美排版 PDF 格式,阅读体验更佳,详见:vimclass/Exercise-08-TextObjects.pdf ↩︎

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

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

相关文章

深度学习中的学习率调度器(scheduler)分析并作图查看各方法差异

文章目录 1. 指数衰减调度器&#xff08;Exponential Decay Scheduler&#xff09;工作原理适用场景实现示例 2. 余弦退火调度器&#xff08;Cosine Annealing Scheduler&#xff09;工作原理适用场景实现示例 3. 步长衰减调度器&#xff08;Step Decay Scheduler&#xff09;工…

基于springboot+vue+微信小程序的宠物领养系统

基于springbootvue微信小程序的宠物领养系统 一、介绍 本项目利用SpringBoot、Vue和微信小程序技术&#xff0c;构建了一个宠物领养系统。 本系统的设计分为两个层面&#xff0c;分别为管理层面与用户层面&#xff0c;也就是管理者与用户&#xff0c;管理权限与用户权限是不…

Nginx安全加固系列:Referrer-Policy

假设页面有一个链接&#xff0c;点击这个链接&#xff0c;会向服务器发送Http请求&#xff0c;加载这个链接指向的页面&#xff0c;在这个Http请求头里&#xff0c;会包含一个Referrer的标头&#xff0c;用于向服务器说明这个Http请求是从哪个页面跳转过来的&#xff0c;那么这…

SQL面试题1:连续登陆问题

引言 场景介绍&#xff1a; 许多互联网平台为了提高用户的参与度和忠诚度&#xff0c;会推出各种连续登录奖励机制。例如&#xff0c;游戏平台会给连续登录的玩家发放游戏道具、金币等奖励&#xff1b;学习类 APP 会为连续登录学习的用户提供积分&#xff0c;积分可兑换课程或…

LeetCode_5. 最长回文子串

最长回文子串https://leetcode.cn/problems/longest-palindromic-substring?envTypeproblem-list-v2&envId2cktkvj 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" …

3D目标检测数据集——Waymo数据集

Waymo数据集簡介 发布首页&#xff1a;https://waymo.com/open/ 论文&#xff1a;https://openaccess.thecvf.com/content_CVPR_2020/papers/Sun_Scalability_in_Perception_for_Autonomous_Driving_Waymo_Open_Dataset_CVPR_2020_paper.pdf github&#xff1a;https://github.…

如何在 Linux、MacOS 以及 Windows 中打开控制面板

控制面板不仅仅是一系列图标和菜单的集合&#xff1b;它是通往优化个人计算体验的大门。通过它&#xff0c;用户可以轻松调整从外观到性能的各种参数&#xff0c;确保他们的电脑能够完美地适应自己的需求。无论是想要提升系统安全性、管理硬件设备&#xff0c;还是简单地改变桌…

Mycat读写分离搭建及配置超详细!!!

目录 一、Mycat产生背景二、Mycat介绍三、Mycat安装四、Mycat搭建读写分离1、 搭建MySQL数据库主从复制2、 基于mysql主从复制搭建MyCat读写分离 五、Mycat启动常见错误处理1、Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema TESTDB refered by user u…

空指针:HttpSession异常,SpringBoot集成WebSocket

异常可能性&#xff1a; 404 &#xff1a; 请检查拦截器是否将请求拦截WebSocket握手期间HttpSession为空 HttpSession为空 方法一 &#xff1a; 网上参考大量的文档&#xff0c;有说跟前端请求域名有关系的。 反正对我来说&#xff0c;没啥用无法连接。 需使用 localhost&a…

【大数据】机器学习------决策树

一、基本流程 决策树是一种基于树结构的分类和回归方法&#xff0c;它通过对特征空间进行划分&#xff0c;每个内部节点表示一个特征测试&#xff0c;每个分支代表一个测试输出&#xff0c;每个叶节点代表一个类别或回归值。 特征选择&#xff1a;根据某种准则&#xff08;如信…

服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上的8块硬盘组建了一组raid5磁盘阵列。上层安装windows server操作系统&#xff0c;部署了oracle数据库。 raid5阵列中有2块硬盘的硬盘指示灯显示异常报警。服务器操作系统无法启动&#xff0c;ORACLE数据库也无法启动。 服…

Day05-后端Web基础——TomcatServletHTTP协议SpringBootWeb入门

目录 Web基础知识课程内容1. Tomcat1.1 简介1.2 基本使用1.2.1 下载1.2.2 安装与卸载1.2.3 启动与关闭1.2.4 常见问题 2. Servlet2.1 快速入门2.1.1 什么是Servlet2.1.2 入门程序2.1.3 注意事项 2.2 执行流程 3. HTTP协议3.1 HTTP-概述3.1.1 介绍3.1.2 特点 3.2 HTTP-请求协议3…

【已解决】【记录】2AI大模型web UI使用tips 本地

docker desktop使用 互动 如果需要发送网页链接&#xff0c;就在链接上加上【#】号 如果要上传文件就点击这个➕号 中文回复 命令它只用中文回复&#xff0c;在右上角打开【对话高级设置】 输入提示词&#xff08;提示词使用英文会更好&#xff09; Must reply to the us…

Deep4SNet: deep learning for fake speech classification

Deep4SNet&#xff1a;用于虚假语音分类的深度学习 摘要&#xff1a; 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中&#xff0c;录音听起来有点合成&#xff0c;而在《模仿》中…

Docker save load 镜像 tag 为 <none>

一、场景分析 我从 docker hub 上拉了这么一个镜像。 docker pull tomcat:8.5-jre8-alpine 我用 docker save 命令想把它导出成 tar 文件以便拷贝到内网机器上使用。 docker save -o tomcat-8.5-jre8-alpine.tar.gz 镜像ID 当我把这个镜像传到别的机器&#xff0c;并用 dock…

备战蓝桥杯 队列和queue详解

目录 队列的概念 队列的静态实现 总代码 stl的queue 队列算法题 1.队列模板题 2.机器翻译 3.海港 双端队列 队列的概念 和栈一样&#xff0c;队列也是一种访问受限的线性表&#xff0c;它只能在表头位置删除&#xff0c;在表尾位置插入&#xff0c;队列是先进先出&…

工厂物流管理系统方案(二):危险品车辆专用导航系统架构设计深度剖析

本文专为IT架构师、物流技术专家、软件开发工程师及对危险品运输导航技术有深入探索需求的读者撰写&#xff0c;旨在全面解析危险品车辆专用导航系统的架构设计&#xff0c;展现其技术深度与复杂性&#xff0c;为行业同仁提供权威的技术参考与实践指导。如需获取危险品车辆专用…

用 Python 从零开始创建神经网络(十九):真实数据集

真实数据集 引言数据准备数据加载数据预处理数据洗牌批次&#xff08;Batches&#xff09;训练&#xff08;Training&#xff09;到目前为止的全部代码&#xff1a; 引言 在实践中&#xff0c;深度学习通常涉及庞大的数据集&#xff08;通常以TB甚至更多为单位&#xff09;&am…

No.1|Godot|俄罗斯方块复刻|棋盘和初始方块的设置

删掉基础图标新建assets、scenes、scripts文件夹 俄罗斯方块的每种方块都是由四个小方块组成的&#xff0c;很适合放在网格地图中 比如网格地图是宽10列&#xff0c;高20行 要实现网格的对齐和下落 Node2D节点 新建一个Node2D 添加2个TileMapLayer 一个命名为Board&…

蓝桥云客第 5 场 算法季度赛

题目&#xff1a; 2.开赛主题曲【算法赛】 - 蓝桥云课 问题描述 蓝桥杯组委会创作了一首气势磅礴的开赛主题曲&#xff0c;其歌词可用一个仅包含小写字母的字符串 S 表示。S 中的每个字符对应一个音高&#xff0c;音高由字母表顺序决定&#xff1a;a1,b2,...,z26。字母越靠后…