【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)

文章目录

  • [Section 3:Vim Essentials(Vim 核心知识)](#Section 3:Vim Essentials(Vim 核心知识))
    • [S03L10 Vim 核心浏览命令同步练习点评课](#S03L10 Vim 核心浏览命令同步练习点评课)
    • [S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养](#S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养)
      • [1 删除单个字符](#1 删除单个字符)
      • [2 删除一个单词](#2 删除一个单词)
        • [2.1 推广1:D + HJKL](#2.1 推广1:D + HJKL)
        • [2.2 推广2:D + 0](#2.2 推广2:D + 0)
        • [2.3 推广3:大写的 D](#2.3 推广3:大写的 D)
      • [3 删除一整行](#3 删除一整行)
        • [3.1 推广1:删除 3 行](#3.1 推广1:删除 3 行)
        • [3.2 推广2:[count]operation[count]{motion}](#3.2 推广2:[count]operation[count]{motion})
      • [4 点操作符 .](#4 点操作符 .)
      • [5 保存文件相关操作](#5 保存文件相关操作)
        • [5.1 编辑过程中报错文件](#5.1 编辑过程中报错文件)
        • [5.2 保存并退出文件](#5.2 保存并退出文件)
        • [5.3 退出文件且不保存变更](#5.3 退出文件且不保存变更)
      • [6 感叹号键 ! 的用法](#6 感叹号键 ! 的用法)
        • [6.1 用法1:强制执行](#6.1 用法1:强制执行)
        • [6.2 用法2:切换状态](#6.2 用法2:切换状态)
        • [6.3 用法3:执行某个命令行命令](#6.3 用法3:执行某个命令行命令)
      • [7 小结](#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 键产生的光标位移效果】

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

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

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

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

2.2 推广2:D + 0$

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

shell 复制代码
# 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.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](#感叹号用法 示例 强制退出 :q! 状态切换(命令模式下) :set ruler! 执行命令(命令模式下) :!ls(查看当前目录的文件列表)2)^

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

  2. 来自 ChatGPT,本节未涉及。 ↩︎

相关推荐
1101 110116 分钟前
STM32-笔记33-Wi-Fi遥控风扇项目
笔记
半导体守望者1 小时前
AE Pinnacle 10x6 kW DeviceNet MDXL User r Manual
经验分享·笔记·功能测试·自动化·制造
egoist20231 小时前
数据结构之单链表(超详解)
c语言·开发语言·数据结构·笔记·学习·链表·gitee
一只小爪子2 小时前
vim 的基础使用
linux·编辑器·vim
安冬的码畜日常2 小时前
【Vim Masterclass 笔记01】Section 1:Course Overview + Section 2:Vim Quickstart
笔记·vim
Spcarrydoinb3 小时前
python学习笔记—12—布尔类型、if语句
笔记·python·学习
go_bai3 小时前
OJ随机链表的复制题目分析
数据结构·经验分享·笔记·链表·学习方法
你好,赵志伟4 小时前
线性代数考研笔记
笔记·线性代数·考研
Vizio<5 小时前
微机——计算机中的数制
笔记·单片机·51单片机
我爱学习_zwj6 小时前
防御式CSS是一种编写CSS的方法,旨
笔记