当前位置: 首页 > 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开发和维护。它强调组件化和声明式编程,使得构建复杂的用户界面变得更…...

ES IK分词器插件

前言 ES中默认了许多分词器,但是对中文的支持并不友好,IK分词器是一个专门为中文文本设计的分词工具,它不是ES的内置组件,而是一个需要单独安装和配置的插件。 Ik分词器的下载安装(Winows 版本) 下载地址:…...

二十三种设计模式-抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式,用于创建一系列相关或相互依赖的对象,而不需要指定它们具体的类。这种模式主要用于系统需要独立于其产品的创建逻辑时,并且…...

python opencv的orb特征检测(Oriented FAST and Rotated BRIEF)

官方文档:https://docs.opencv.org/4.10.0/d1/d89/tutorial_py_orb.html SIFT/SURF/ORB对比 https://www.bilibili.com/video/BV1Yw411S7hH?spm_id_from333.788.player.switch&vd_source26bb43d70f463acac2b0cce092be2eaa&p80 ORB代码 import numpy a…...

高阶数据结构----布隆过滤器和位图

(一)位图 位图是用来存放某种状态的,因为一个bit上只能存0和1所以一般只有两种状态的情况下适合用位图,所以非常适合判断数据在或者不在,而且位图十分节省空间,很适合于海量数据,且容易存储&…...

VScode使用密钥进行ssh连接服务器方法

如何正常连接ssh的方式可以看我原来那篇文章:Windows上使用VSCode连接远程服务器ssh 1.连接 点击ssh加号,然后关键点在第2步的书写上 2.命令 2的位置写命令: ssh -i "C:\Users\userName\.ssh\id_rsa" usernameIP -p 端口号 端…...

艾体宝产品丨加速开发:Redis 首款 VS Code 扩展上线!

Redis 宣布推出其首款专为 VS Code 设计的 Redis 扩展。这一扩展将 Redis 功能直接整合进您的集成开发环境(IDE),旨在简化您的工作流程,提升工作效率。 我们一直致力于构建强大的开发者生态系统,并在您工作的每一步提…...

应用架构模式

设计模式 设计模式是指根据通用需求来设计解决方案的模板或蓝图,使用设计模式能够更加有效地解决设计过程中的常见问题。设计模式针对不同的问题域有不同的内涵,主要涉及业务、架构、程序设计等问题域,本文主要讨论架构设计模式。 业务设计模…...

注入少量可学习的向量参数: 注入适配器IA3

注入少量可学习的向量参数: 注入适配器IA3 简介:IA3通过学习向量来对激活层加权进行缩放,从而获得更强的性能,同时仅引入相对少量的新参数。它的诞生背景是为了改进LoRA,与LoRA不同的是,IA3直接处理学习向量,而不是学习低秩权重矩阵,这使得可训练参数的数量更少,并且原…...

【C++】B2076 球弹跳高度的计算

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式输入输出示例 💯两种代码实现及其对比我的代码实现代码分析优点与不足 老师的代码实现代码分析优点与不足 💯两种实现的对…...

【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)

我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。 这里我们可以加入JavaScript的使…...