09 Vim 寄存器
寄存器这个概念,在之前的Vim复制、删除章节已经和大家提过。想必大家应该还有印象。我们根据那节场景讲了无名寄存器和复制专用寄存器。本节,我们就更加深入了解寄存器的概念和使用场景。
1. 寄存器概念
Vim 中的寄存器简单来说就是用于保存文本的容器。我们对不同场景划分了不同的寄存器,或者说容器。主要用于 Vim 使用中临时保存一些数据。
之前章节中我们我们提到过这个概念,并且对 Windows 和 Vim 编辑器之间不同点做了对比。它们之间最大不同就在于寄存器的概念。Vim 分门别类地划分了几十组不同的寄存器或者容器来临时保存文本。Windows 系统只使用单一的剪切板。
1.1 寄存器常用种类
Vim 寄存器有很多种,这里我们只会讲解四种常用的寄存器。其他大家可以在 Vim help(:h reg)中了解即可。
类型 | 含义 | 表达式 | 举例 | 特点 |
---|---|---|---|---|
无名寄存器 | 默认寄存器 | “” | “” p = p | 会被最后一条覆盖 |
数字寄存器 | "+{0-9}缓存最近10次操作 | “{0-9} | "1P | 0是复制专用,1-9用于常规删改记录 |
有名寄存器 | 26个英文字母命名 | "[a-z]/[A-Z] | "ayw | 赋予具体字母名字 |
黑洞寄存器 | 有去无回 | "_ | "_dw | 只删除不保存,相当于windows 中的删除 |
2. 实战案例
寄存器使用相关命令:
命令 | 含义 |
---|---|
:reg | 查看所有寄存器 |
:reg 寄存器名字 | 查看具体寄存器 |
使用寄存器:"{reg_类型}+命令: 无论是存入寄存器还是引用寄存器内容都是这个公式。我们来具体看下。
2.1 无名寄存器
这个是默认寄存器,顾名思义就是没有名字。使用双引号表示——"".我们的删除、复制等操作都默认存在这里。当然复制除了默认存在无名寄存器还会存入专用的复制寄存器,后面会提到。
删除操作
可以看到当我们删除了resource 后,通过查看寄存器可以看到在无名寄存器 ——""中包含了我们删除的字符串resource。
复制操作
可以看到当我们复制字符串dataspace后,再查看寄存器时候发现两个变化:
- 首先无名寄存器中之前存入的 resource 被 dataspace 覆盖了。
- 可以看到数字0寄存器也变成了 dataspace。这就是我们之前说的复制专用寄存器。
2.2 数字寄存器
除了刚才的数字 0 寄存器(也叫复制寄存器)之外,还有其他九个数字寄存器[1-9]。这就等于给寄存器编了个号码,类似于人的身份证号一样。
特点: 当删除一整行时候
- 数字1:最近删除的文本
- 数字2:存放倒数第二删除的文本
删除一整行场景
可以看到数字寄存器内容会按照删除行顺序倒序。需要注意的是只有删除整行才会这样。大家可以自己试试看删除单个单词会出现这样的情况么?
2.3 有名寄存器
这就相当于给寄存器起了个名字。只不过名字比较简单 [a-Z]。场景和逻辑都比较简单。下面我们来看下演示:
可以看到我们给每个删除操作都分门别类取了个名字。这样就可以按需提取使用了。
黑洞寄存器
这个看名字就很容易理解。指定到这个寄存器的内容是有去无回的。真正意义上的删除。
使用黑洞寄存器后,我们可以通过 reg 命令查看寄存器内容。可以看到所有的寄存器都不存在env 内容,也就是说通过寄存器已经直接删除了。
3. 小结
以上就是寄存器的主要内容,如果大家看过 Vim 帮助的话。会发现还有很多其他的寄存器。这里只是涉及最常用的寄存器。基本可以满足大家日常使用需要。其他更高级的寄存器,大家可以自行查看使用。