【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
文章目录
- Section 3:Vim Essentials(Vim 核心知识)
- S03L10 Vim 核心浏览命令同步练习点评课
- S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养
- 1 删除单个字符
- 2 删除一个单词
- 2.1 推广1:D + HJKL
- 2.2 推广2:D + 0$
- 2.3 推广3:大写的 D
- 3 删除一整行
- 3.1 推广1:删除 3 行
- 3.2 推广2:[count]operation[count]{motion}
- 4 点操作符 .
- 5 保存文件相关操作
- 5.1 编辑过程中报错文件
- 5.2 保存并退出文件
- 5.3 退出文件且不保存变更
- 6 感叹号键 ! 的用法
- 6.1 用法1:强制执行
- 6.2 用法2:切换状态
- 6.3 用法3:执行某个命令行命令
- 7 小结
【写在前面】
都说“温故而知新”,用在这篇笔记上真是太贴切了。第一遍做笔记的时候还检查过一遍,但这次再以专栏形式发出来、隔了一段时间再看当时的笔记,就会发现很多细小的问题。笔记、文章、代码、项目,生活中的很多人和事,大抵如此。我们要做的不是毕其功于一役,而是“先完成,再完美”。这篇笔记的知识点非常重要,重点在于培养Vim专属的思维习惯,这也是我为什么把同步练习环节安排到下一篇的原因。
Section 3:Vim Essentials(Vim 核心知识)
(接上篇笔记)
S03L10 Vim 核心浏览命令同步练习点评课
没有需要特别注意的补充知识点,都是基础操作,多练多熟悉即可。
S03L11 Deleting Text and “Thinking in Vim” 文本的删除及 Vim 思维习惯的培养
1 删除单个字符
删除当前光标所在的单个字符:X
删除当前光标所在字符的前一个字符:Shift + X
2 删除一个单词
DW:删除一个单词 1
Vim 基本形式:operation{motion}( 操作{移动} )——
- 这里的 操作 即 D,表示 “删除操作”;
- 移动 即 W,这里表示 一个单词的移动。
2.1 推广1:D + HJKL
此外,由于浏览内容用的 H、J、K、L 命令也是一个 motion,因此,DW 还可以写成 D + n × L,即若干个 L 键,直到该单词被删除。
再联系 X 的用法:
- 小写 X 相当于 DL,删除光标当前位置的字符;
- 大写 X 则相当于 DH,删除紧挨光标前的那个字符。
那么,DJ 和 DH 呢?由于 J 的移动量是从上一行到下一行(如下图所示),因此 DJ 是否只会删除图中选中的部分?

【图 11-1 J 键产生的光标位移效果】
答案是否定的—— DJ 删除的是光标所在的 一整行,外加光标下面的那 一整行,如图 11-2 所示:

【图 11-2 按下 dj 后的实际效果:删除了两行,而不是单独的 J 选中的部分】
因此基本形式中的 motion 还不能简单理解为 位移量,而是要看当时 motion 的真实含义:J 表示将光标从 当前行向下 移动 一行,因此删除的是两行,而非单个 J 键扫过的部分。
同理,DK 的效果即为 删除当前行以及上一行。
2.2 推广2:D + 0$
有了上面的铺垫,D0 和 D$ 的行为就更好理解了,二者分别删除当前光标到该行起始、以及该行结束的内容:
# 0. Before operation
Here is another line of text.^ current cursor position
# 1. after pressing d0
ther line of text.
^ current cursor position
# 2. after pressing d$ (no content)
Here is ano^ current cursor position
注意:执行 d$ 后,原光标所在的字符 也将被同时删除。
2.3 推广3:大写的 D
在 Vim 中,大写的 D,即 Shift + D,等效于 D$,即删除当前光标及其后面所有的内容(在同一行上)
可见,Vim 中要达到同一个目的,通常有很多操作方案,根据个人喜好选择即可。自己熟悉的操作才更容易记牢。
3 删除一整行
按键:DD(均为小写)
3.1 推广1:删除 3 行
按键:3DD
由此出现了 Vim 的另一个基本形式:[count]operation{motion}([数量]操作{移动})——
5DW:
- 5:重复操作的次数
- DW:待重复命令(删除单个单词)
其实 DW 只是 1DW 省略了重复次数 1 之后的特殊形式。
3.2 推广2:[count]operation[count]{motion}
回忆 L08 中介绍的核心浏览操作,{motion} 前还可以跟一个数量:[count]{motion},因此结合第二个 Vim 基本形式,得到第三种推广形式:[count]operation[count]{motion}
注:这里的中括号 [] 表示非必填项,{} 则为必填项,什么都不加的也是必填项。
再看一个例子加深印象:
- 3W:重复 W 移动 3 次。
- D3W:删除 3W 移动(一遍)。即删除 3 个单词。
- 2D3W:删除 3W 移动,共执行两遍。即删除 6 个单词。
4 点操作符 .
表示快速重复上一次操作。类似 MS Word 中的 Ctrl + Y。
5 保存文件相关操作
5.1 编辑过程中报错文件
操作::w + Enter
执行完毕后仍在 Vim 常规模式下。

【图 11-3 在不退出 Vim 的情况下保存文件的操作】
5.2 保存并退出文件
操作::wq + Enter
5.3 退出文件且不保存变更
操作::q! + Enter
6 感叹号键 ! 的用法
6.1 用法1:强制执行
例如,退出但不保存::q + ! + Enter
此时文件有变更,只是不保存、直接退出。
如果此时省略叹号,变成 :q + Enter,则 Vim 会再次确认是否真的想退出,并给出提示信息(如图所示):

【图 11-4 有变更但未强制退出时,Vim 会中断操作并给出中文提示信息】

【图 11-5 有变更但未强制退出时,Vim 会中断操作并给出英文提示信息】
上面两张截图,第一张是 Windows 下安装的 v9.1 版 Vim;第二张为 Windows Subsystem for Linux(WSL)下 Ubuntu 系统自带的 v8.1 版 Vim。二者效果一致,都会中断操作。
6.2 用法2:切换状态
如配置状态栏的信息显示与否时,可以使用 :set ruler + ! 来切换 :set ruler 和 :set noruler 两个状态。
6.3 用法3:执行某个命令行命令
(后面详述,本节略)
7 小结
Vim的三个基本形态:
| 基本形态 | 示例 |
|---|---|
operation{motion} | DW |
[count]operation{motion} | 3DW |
[count]operation[count]{motion} | 2D3W |
- 感叹号的三个用法:
| 感叹号用法 | 示例 |
|---|---|
| 强制退出 | :q! |
| 状态切换(命令模式下) | :set ruler! |
| 执行命令(命令模式下) | :!ls(查看当前目录的文件列表)2 |
准确讲,应该是从 当前光标位置 开始,将按下小写 W 键经过的内容都删掉。 ↩︎
来自
ChatGPT,本节未涉及。 ↩︎
相关文章:
【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1:D HJK…...
ARM200~500部署
前提:数据库已经安装好,并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件,更改小区名称和IP,并将文件上传到/…...
word中插入zotero引用
1、参考文献末尾没有文献? 在文献条目要显示的地方点击“refresh” 2、参考文献条目没有悬挂缩进? 把“书目”添加到样式库中,修改样式为悬挂缩进1.5字符 3、交叉引用? 宏 新建一个宏 粘贴下面代码 Public Sub ZoteroLinkCita…...
需求上线,为什么要刷缓存?
在需求上线的过程中,刷缓存主要有以下几个重要原因: 一、保证数据的准确性 旧数据残留问题 缓存是为了加快数据访问速度而存储的数据副本。在需求更新后,之前缓存中的数据可能已经不符合新的业务逻辑。例如,一个电商网站修改了商…...
TVS二极管选型【EMC】
TVS器件并联在电路中,当电路正常工作时,他处于截止状态(高阻态),不影响线路正常工作,当线路处于异常过压并达到其击穿电压时,他迅速由高阻态变为低阻态,给瞬间电流提供一个低阻抗导通…...
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
本篇博客将聚焦于通过递归来实现两种经典的枚举方法:指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用,无论是在解题中,还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…...
C#对线程同步的应用
什么是线程同步?线程同步的应用场景有哪些?在C#中有哪些线程同步方式?下面对这些问题做一个总结,让大家在面试的时候遇到这些问题能够游刃有余。 线程同步是指在多线程环境下,多个线程同时访问共享资源时,确…...
基于微信小程序的面部动作检测系统
引言 本技术文档旨在详细阐述一个基于微信小程序的面部动作检测系统的技术路线、实现方法及关键技术框架。系统的核心功能包括检测用户的左右转头、眨眼和张嘴动作,并根据检测结果逐步引导用户完成任务。为确保系统的安全性和准确性,特别是防止用户通过…...
Activation Functions
Chapter4:Activation Functions 声明:本篇博客笔记来源于《Neural Networks from scratch in Python》,作者的youtube 其实关于神经网络的入门博主已经写过几篇了,这里就不再赘述,附上链接。 1.一文窥见神经网络 2.神经…...
《Vue3实战教程》37:Vue3生产部署
如果您有疑问,请观看视频教程《Vue3实战教程》 生产部署 开发环境 vs. 生产环境 在开发过程中,Vue 提供了许多功能来提升开发体验: 对常见错误和隐患的警告对组件 props / 自定义事件的校验响应性调试钩子开发工具集成 然而ÿ…...
Linux:各发行版及其包管理工具
相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Debian 包管理工具:dpkg(低级包管理器)、apt(高级包管理器,建立在dpkg基础上)包格式:…...
【计算机网络】课程 作业一 搭建连续覆盖的办公网络
作业一 搭建连续覆盖的办公网络 题目:论述题(共1题,100分) 充分利用所学习的数据链路层局域网知识,加上物理层的基础知识,请给一个办公场所(三层,每层约100平方)…...
C++ 设计模式:单例模式(Singleton Pattern)
链接:C 设计模式 链接:C 设计模式 - 享元模式 单例模式(Singleton Pattern)是创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式在需要全局共享资源或控制实例数量的…...
OpenCV调整图像亮度和对比度
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、基本方法---线性变换 // 亮度和对比度调整 cv::Mat adjustBrightnessContrast(const cv::Mat& src, double alpha, int beta) {cv::Mat dst;src.convertTo(dst, -1, alpha, beta);return dst; }// 使用…...
Kafka Offset explorer使用
Kafka集群配置好以后以后运维这边先用工具测试一下,便于rd展开后续的工作,本地调试时一般使用Offset explorer工具进行连接 使用SASL(Simple Authentication and Security Layer)验证方式 使用SCRAM-SHA-256(Salted Challenge Response Authentication…...
二维码文件在线管理系统-收费版
需求背景 如果大家想要在网上管理自己的文件,而且需要生成二维码,下面推荐【草料二维码】,这个系统很好。特别适合那些制造业,实体业的使用手册,你可以生成一个二维码,贴在设备上,然后这个二维码…...
UE4.27 Android环境下获取手机电量
获取电量方法 使用的方法时FAndroidMisc::GetBatteryLevel(); 出现的问题 但是在电脑上编译时发现,会发现编译无法通过。 因为安卓环境下编译时,包含 #include "Android/AndroidPlatformMisc.h" 头文件是可以正常链接的,但在电…...
vue-i18n报错
1. 开发环境报错Uncaught (in promise) TypeError: ‘set’ on proxy: trap returned falsish for property ‘$t’ legacy需要设置为false const i18n createI18n({legacy: false,// 默认语言locale: lang,// 设置语言环境messages, })2. 打包配置tsc --noEmit时报错&#…...
Docker新手:在tencent云上实现Python服务打包到容器
1 使用docker的原因 一致性和可移植性:Docker 容器可以在任何支持 Docker 的环境中运行,无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致,减少了“在我的机器上可以运行”的问题。 隔离性ÿ…...
React基础知识学习
学习React前端框架是一个系统而深入的过程,以下是一份详细的学习指南: 一、React基础知识 React简介 React是一个用于构建用户界面的JavaScript库,由Facebook开发和维护。它强调组件化和声明式编程,使得构建复杂的用户界面变得更…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
