当前位置: 首页 > news >正文

【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

此外,由于浏览内容用的 HJKL 命令也是一个 motion,因此,DW 还可以写成 D + n × L,即若干个 L 键,直到该单词被删除。

再联系 X 的用法:

  • 小写 X 相当于 DL,删除光标当前位置的字符;
  • 大写 X 则相当于 DH,删除紧挨光标前的那个字符。

那么,DJDH 呢?由于 J 的移动量是从上一行到下一行(如下图所示),因此 DJ 是否只会删除图中选中的部分?

图 11-1 J 键产生的光标位移效果

【图 11-1 J 键产生的光标位移效果】

答案是否定的—— DJ 删除的是光标所在的 一整行,外加光标下面的那 一整行,如图 11-2 所示:

图 11-2 按下 dj 后的实际效果:删除了两行,而不是单独的 J 选中的部分

【图 11-2 按下 dj 后的实际效果:删除了两行,而不是单独的 J 选中的部分】

因此基本形式中的 motion 还不能简单理解为 位移量,而是要看当时 motion 的真实含义:J 表示将光标从 当前行向下 移动 一行,因此删除的是两行,而非单个 J 键扫过的部分。

同理,DK 的效果即为 删除当前行以及上一行

2.2 推广2:D + 0$

有了上面的铺垫,D0D$ 的行为就更好理解了,二者分别删除当前光标到该行起始、以及该行结束的内容:

# 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 的情况下保存文件的操作

【图 11-3 在不退出 Vim 的情况下保存文件的操作】

5.2 保存并退出文件

操作::wq + Enter

5.3 退出文件且不保存变更

操作::q! + Enter

6 感叹号键 ! 的用法

6.1 用法1:强制执行

例如,退出但不保存::q + ! + Enter

此时文件有变更,只是不保存、直接退出。

如果此时省略叹号,变成 :q + Enter,则 Vim 会再次确认是否真的想退出,并给出提示信息(如图所示):

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

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

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

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

上面两张截图,第一张是 Windows 下安装的 v9.1Vim;第二张为 Windows Subsystem for LinuxWSL)下 Ubuntu 系统自带的 v8.1Vim。二者效果一致,都会中断操作。

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

  1. 准确讲,应该是从 当前光标位置 开始,将按下小写 W 键经过的内容都删掉。 ↩︎

  2. 来自 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 / 自定义事件的校验响应性调试钩子开发工具集成 然而&#xff…...

Linux:各发行版及其包管理工具

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Debian 包管理工具:dpkg(低级包管理器)、apt(高级包管理器,建立在dpkg基础上)包格式:…...

【计算机网络】课程 作业一 搭建连续覆盖的办公网络

作业一 搭建连续覆盖的办公网络 题目:论述题(共1题,100分) 充分利用所学习的数据链路层局域网知识,加上物理层的基础知识,请给一个办公场所(三层,每层约100平方)&#xf…...

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 的环境中运行,无论是开发者的笔记本电脑、测试服务器还是生产环境。这确保了应用在不同环境中的行为一致,减少了“在我的机器上可以运行”的问题。 隔离性&#xff…...

React基础知识学习

学习React前端框架是一个系统而深入的过程,以下是一份详细的学习指南: 一、React基础知识 React简介 React是一个用于构建用户界面的JavaScript库,由Facebook开发和维护。它强调组件化和声明式编程,使得构建复杂的用户界面变得更…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...