Vim 中的寄存器允许您对存储在其中的文本运行操作或命令。要访问寄存器,请在命令之前键入"a
,其中a
是寄存器的名称。如果要将当前行复制到寄存器k
,可以键入
“KYY
或者您可以使用大写字母附加到注册表中
“KYY
然后,您可以浏览文档并将其粘贴到其他位置
“KP
从 Linux 上的系统剪贴板粘贴
“+ P
从 Windows 上的系统剪贴板粘贴(或从 Linux 上的 “鼠标突出显示” 剪贴板粘贴)
“* P
访问所有当前定义的寄存器类型
:REG
当我发现0
寄存器时,我很高兴。如果您在没有将文本分配给特定寄存器的情况下抽取文本,那么它将被分配给0
寄存器,并保存在默认的"
寄存器中0
和"
寄存器之间的区别在于0
仅填充了被填充的文本,而默认寄存器也填充了使用d
/ D
/ x
/ X
/ c
/ C
/ s
/ S
命令删除的文本。
当我想复制一些文本,删除一些东西并用复制的文本替换它时,我觉得这很有用。以下步骤说明了一个示例:
y[motion]
对要复制的文本进行抽取 - 此文本保存在"
和0
寄存器中"
d[motion]
删除要替换的文本 - 此文本保存在"
注册表中"
"0p
粘贴被拉动的文本其中"
是使用寄存器执行下一个命令的命令。
在最后一步,如果您要从默认寄存器(使用p
)粘贴,它将使用您刚刚删除的文本(可能不是您想要的)。
请注意, p
或P
粘贴自默认寄存器。等长的等价物将是""p
(或""P
)并且"0
保持最后一次猛拉"1
保持最后一次删除或更改。
有关更多信息,请参阅:help registers
关于寄存器,我最喜欢的部分之一是将它们用作宏!
假设您正在处理制表符分隔的值文件:
ID Df %Dev Lambda
1 0 0.000000 0.313682
2 1 0.023113 0.304332
3 1 0.044869 0.295261
4 1 0.065347 0.286460
5 1 0.084623 0.277922
6 1 0.102767 0.269638
7 1 0.119845 0.261601
现在您决定需要在%Dev 字段的末尾添加百分号(从第 2 行开始)。我们将在(任意选择的) m
寄存器中创建一个简单的宏,如下所示:
按: qm
:开始在m
寄存器下录制宏。
EE
:转到第 3 列的末尾。
a
:插入模式以附加到此列的末尾。
%
:输入我们要添加的百分号。
<ESC>
:返回命令模式。
j0
:转到下一行的开头。
q
:停止录制宏
我们现在只需键入@m
即可在当前行上运行此宏。此外,我们可以输入@@
重复,或100@m
这样做 100 次!生活看起来很不错。
在这一点上,你应该说,“ 但是,等待这些注册事项需要做什么?”
优点。让我们通过输入"mp
来调查m
寄存器内容是什么。然后我们得到以下内容:
EEa%<ESC>j0
起初,这看起来像你不小心在记事本中打开了一个二进制文件,但第二眼看, 它是我们宏中的确切字符序列!
你是一个好奇的人,所以让我们做一些有趣的事情并编辑这一行文字以插入一个!
而不是无聊的旧%
。
EEa!<ESC>j0
然后让我们通过键入B"nyE
将其打入n
寄存器。然后,只是为了踢,让我们使用@n
在我们的数据行上运行n
宏....
天啊,加了一个!
从本质上讲,运行宏就像按下宏的寄存器中的确切键序列。如果这不是一个很酷的注册技巧,我会吃掉我的帽子。