协慌网

登录 贡献 社区

我如何使用 vim 寄存器?

我只知道一个使用寄存器的实例是通过Ctrl R * ,我从剪贴板粘贴文本。

寄存器的其他用途是什么?怎么用?

关于 VI 寄存器的所有知识(让我们关注 vi 7.2) - 与我们分享。

答案

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 )粘贴,它将使用您刚刚删除的文本(可能不是您想要的)。

请注意, pP粘贴自默认寄存器。等长的等价物将是""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寄存器中创建一个简单的宏,如下所示:

  1. 按: qm :开始在m寄存器下录制宏。

  2. EE :转到第 3 列的末尾。

  3. a :插入模式以附加到此列的末尾。

  4. % :输入我们要添加的百分号。

  5. <ESC> :返回命令模式。

  6. j0 :转到下一行的开头。

  7. q :停止录制宏

我们现在只需键入@m即可在当前行上运行此宏。此外,我们可以输入@@重复,或100@m这样做 100 次!生活看起来很不错。

在这一点上,你应该说,“ 但是,等待这些注册事项需要做什么?”

优点。让我们通过输入"mp来调查m寄存器内容是什么。然后我们得到以下内容:

EEa%<ESC>j0

起初,这看起来像你不小心在记事本中打开了一个二进制文件,但第二眼看, 它是我们宏中的确切字符序列!

你是一个好奇的人,所以让我们做一些有趣的事情并编辑这一行文字以插入一个!而不是无聊的旧%

EEa!<ESC>j0

然后让我们通过键入B"nyE将其打入n寄存器。然后,只是为了踢,让我们使用@n在我们的数据行上运行n宏....

天啊,加了一个!

从本质上讲,运行宏就像按下宏的寄存器中的确切键序列。如果这不是一个很酷的注册技巧,我会吃掉我的帽子。