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

文章目录

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

写在前面

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

L29 Exercise 08 - Text Objects


1 训练目标

熟悉 Vim 中的各类文本对象。[1](#1)

2 操作指令

2.1. 打开 textobjectspractice.txt 文件

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

bash 复制代码
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 键返回常规模式。

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

markdown 复制代码
The tourist (as we will call him) was expounding.

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

markdown 复制代码
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)。然后将下列文字:

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

改为:

markdown 复制代码
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

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

python 复制代码
scripts=[ 'bin/backup',
          'bin/backup-all',
          'bin/backup-db-only',
          'bin/backup-files-only' ]

删除后将变为:

python 复制代码
scripts=[]

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

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

按 JJ 将光标移至如下这行:

markdown 复制代码
<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。改动前的原始文本如下:

html 复制代码
<p><a href="https://linuxtrainingacademy.com">Linux Training Academy</a></p>

这是变更后的效果:

html 复制代码
<p><a href="https://linuxtrainingacademy.com">LTA</a></p>

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

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

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 复制代码
<?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,表示删除该标签(d elete a t ag)。注意:如果光标定位到其他地方,可能只会删除内部嵌套的标签 <TITLE> 或者 <ARTIST>,而不是题目要求的整个 <CD> 标签。

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

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

python 复制代码
musicians = {
  'Charlie Parker': 'alto sax',
  'John Coltrane': 'tenor sax',
  'Sonny Rollins': 'tenor sax'
}

使其最终变为:

python 复制代码
musicians = { }

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

markdown 复制代码
musicians = {
}

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

2.9. 句子对象练习 Sentence Objects

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

markdown 复制代码
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 ↩︎
相关推荐
yi0115 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
志尊宝6 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
weixin_448119947 小时前
Datawhale Easy Data × AI:笔记1 已重做,看新的笔记
笔记
要开心吖ZSH8 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
咖啡忍者9 小时前
【SAP】程制造生产计划PP-PI(Production Planning for Process Industries)
笔记
Titan202410 小时前
MySQL索引学习笔记
笔记·学习·mysql
zhangrelay10 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
AOI小白新手上路11 小时前
VDMamba·AutoDL 复现笔记 · 学习笔记
笔记·学习
ACP广源盛1392462567312 小时前
USB3.0 高速信号切换方案评估,LH3412 @ACP双通道差分开关硬件选型笔记
笔记·硬件架构·硬件工程·国产芯片·开关
自不量力的A同学13 小时前
Goldfish Scheme v18.11.39 发布了:迈向现代宏系统与多核并发
笔记