【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
文章目录
- 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>
接着,输入 "iyi> 或者 "iyi<,将尖括号内的文本复制到 "i 寄存器中。然后通过命令 :reg i + Enter 查看寄存器 "i 中的内容是否为 yank_me。
然后,再连同尖括号本身,将文本 <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 练习点评课
无增补知识点,多思多练即可。
本节练习另附精美排版 PDF 格式,阅读体验更佳,详见:
vimclass/Exercise-08-TextObjects.pdf↩︎
相关文章:
【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
文章目录 L29 Exercise 08 - Text Objects1 训练目标2 操作指令2.1. 打开 textobjectspractice.txt 文件2.2. 单词对象练习 Word Objects2.3. 区块对象 ( ) 练习 Block Object ( )2.4. 引用字符串练习 Quoted Strings2.5. 区块对象 [ ] 练习 Block Object [ ]2.6. 区块对象 <…...
非PHP开源内容管理系统(CMS)一览
在现代网站开发中,内容管理系统(CMS)是不可或缺的工具。虽然许多广泛使用的CMS(如WordPress和Joomla)是基于PHP开发的,但其他编程语言同样诞生了许多优秀的开源CMS,适用于不同需求和技术栈的项目…...
WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
XSS跨站脚本攻击技术(一) XSS的定义 XSS攻击,全称为跨站脚本攻击,是指攻击者通过在网页中插入恶意脚本代码,当用户浏览该网页时,恶意脚本会被执行,从而达到攻击目的的一种安全漏洞。这些恶意脚…...
SQLAlchemy -批量插入时忽略重复
PostgreSQL 有一个很棒的INSERT() ON CONFLICT DO NOTHING子句,您可以将其与 SQLAlchemy 一起使用: from sqlalchemy.dialects.postgresql import insert session.execute(insert(MyTable).values(my_entries).on_conflict_do_nothing())MySQL 有类似的INSERT IGNORE子句,但…...
1月13日学习
[HITCON 2017]SSRFme 直接给了源代码,题目名称还是ssrf,那么该题大概率就是SSRF的漏洞,进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头,如果存在,则将其拆分为数组,并将第一个 IP 地址…...
Steam个人开发者注册备记
具体的注册过程有很多同志已经写过了,这里只写一点自己搞得有点费劲的地方。有点久了记得也不多了。 1.姓名用汉语拼音,参考护照上的,一般是Zhang Sanli这样的格式,姓一个单词,名字一个单词(不管1个字还是…...
django在线考试系统
Django在线考试系统是一种基于Django框架开发的在线考试平台,它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境,满足教育机构、企业、个人等不同场景下的考试需求。通过该系统,用…...
Laravel 中 Cache::remember 的基本用途
在 Laravel 中,Cache::remember 方法用于缓存数据,以提高应用程序的性能。当需要从数据库或其他较慢的数据源中检索数据时,可以使用 Cache::remember 来检查请求的数据是否已经被缓存。如果数据已缓存,则直接从缓存中读取…...
前端进程和线程及介绍
前端开发中经常涉及到进程和线程的概念,特别是在浏览器中。理解这两个概念对于理解浏览器的工作机制和前端性能优化非常重要。以下是详细介绍: 1. 什么是进程和线程? 进程: 是操作系统分配资源的基本单位。一个程序启动后…...
OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
运行效果 工程说明 源码 vertex.glsl...
Vue Router
Vue Router4 匹配 Vue3;Vue Router3 匹配 Vue2。 Vue Router 是 Vue.js 官方的路由管理器。Vue Router 基于路由和组件的映射关系,监听页面路径的变化,渲染对应的组件。 安装: npm install vue-router。 基本使用: …...
【黑灰产】人工查档业务产业链
2024年“查档”类型泄露事件快速上涨,涉及电商、外卖、社交、快递等行业数据。 近年来,陆续关注到非法数据交易产业链中游频繁出现的“查档”数据泄露情况,例如通过一个手机号,就可以查询这个手机号相关的所有身份信息࿰…...
114周二复盘 (178)
1、打新包,测试 2、白天为打包开始冲刺,问题不少,一堆细节问题, 但还是傍晚打包,不到3分钟,1.77G。 速度超预期。 3、开始测试。 基本还是达到预期的,但还是很多问题。 好在打包速度很快&am…...
day10_Structured Steaming
文章目录 Structured Steaming一、结构化流介绍(了解)1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型(掌握)1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…...
Python的秘密基地--[章节11] Python 性能优化与多线程编程
第11章:Python 性能优化与多线程编程 在开发复杂系统时,性能优化和并发编程是不可忽视的重点。Python 提供了多种工具和技术用于优化代码性能,并通过多线程、多进程等方式实现并发处理。本章将探讨如何在 Python 中提升性能,并实…...
drawDB docker部属
docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/...
探索图像编辑的无限可能——Adobe Photoshop全解析
文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里,视觉内容无处不在,而创建和编辑这些内容的能力已经成为许多行业的核心技能…...
【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象
文章目录 Section 7:Text Objects and MacrosS07L28 Text Objects1 文本对象的含义2 操作文本对象的基本语法3 操作光标所在的整个单词4 删除光标所在的整个句子5 操作光标所在的整个段落6 删除光标所在的中括号内的文本7 删除光标所在的小括号内的文本8 操作尖括号…...
Spring Boot教程之五十五:Spring Boot Kafka 消费者示例
Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架,使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可…...
统计有序矩阵中的负数
统计有序矩阵中的负数 描述 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]…...
2026年脱模油供应商怎么选?这几点很关键
2026年,建筑行业持续发展,脱模油作为建筑施工中不可或缺的材料,其质量和适用性至关重要。关云建材在脱模油领域深耕多年,积累了丰富的行业经验。接下来,我们就来深入探讨脱模油的相关问题,帮助大家选到合适…...
2026AI大模型入门学习教程(建议收藏),大模型入门学习路线,非常详细看这一篇就够了!
一、LLM Fundamentals 基础 1. 机器学习的数学基础 在掌握机器学习之前,理解支撑这些算法的基本数学概念非常重要。 线性代数:这是理解许多算法(特别是深度学习算法)的关键。主要概念包括向量、矩阵、行列式、特征值和特征向量、…...
从数据小白到战斗大师:GBFR Logs如何帮你玩转《碧蓝幻想:Relink》
从数据小白到战斗大师:GBFR Logs如何帮你玩转《碧蓝幻想:Relink》 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/…...
tealdeer与其他tldr客户端的终极对比分析:哪个更适合你的命令行工作流?
tealdeer与其他tldr客户端的终极对比分析:哪个更适合你的命令行工作流? 【免费下载链接】tealdeer A very fast implementation of tldr in Rust. 项目地址: https://gitcode.com/gh_mirrors/te/tealdeer tealdeer是一款用Rust开发的tldr客户端&a…...
掌握N_m3u8DL-CLI-SimpleG:高效流媒体下载工具全攻略
掌握N_m3u8DL-CLI-SimpleG:高效流媒体下载工具全攻略 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 在数字化时代,视频内容已成为信息传播的重要载体&…...
【通信】基于UCB的多智能体多臂老虎机算法降低 OBSS 干扰、提升系统吞吐量与公平性附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
Pylance:重新定义Python开发体验的智能助手
Pylance:重新定义Python开发体验的智能助手 【免费下载链接】pylance-release Documentation and issues for Pylance 项目地址: https://gitcode.com/gh_mirrors/py/pylance-release 提升30%编码效率的10个实战技巧 还在为Python代码补全延迟烦恼ÿ…...
从毫安预警到安培计量:芯森电子FR系列传感器在储能安全与管理中的协同应用
摘要在储能系统(ESS)的安全架构中,电流传感器不仅是计量工具,更是系统的“免疫细胞”。随着储能系统向高压化、数字化演进,单一的电流检测方案已无法满足从“微小漏电预警”到“电池主回路控制”的全栈需求。本文基于芯…...
intv_ai_mk11应用场景:法务合同初审助手、HR招聘JD生成器、财务报表解读辅助工具
intv_ai_mk11在法务、HR和财务领域的三大应用实践 1. 为什么选择intv_ai_mk11作为企业助手 在当今快节奏的商业环境中,法务、HR和财务部门每天都要处理大量重复性工作。传统的人工处理方式不仅效率低下,还容易出错。intv_ai_mk11 AI对话机器人基于7B参…...
忍者像素绘卷从零开始:基于Z-Image-Turbo的亮色像素AI绘画实战教程
忍者像素绘卷从零开始:基于Z-Image-Turbo的亮色像素AI绘画实战教程 1. 认识忍者像素绘卷 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,它将忍者的热血意志与16-Bit复古游戏美学完美融合。与传统AI绘画工具不同,它采用了独…...
