文章目录
- 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
,本节未涉及。 ↩︎