寄存器 - vim粘贴




我如何使用vim寄存器? (10)

带有@ 命令中使用寄存器 。 例如:

echo @a
echo @0
echo @+

将它们设置为命令:

let @a = 'abc'

现在"ap会粘贴abc

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

寄存器的其他用途是什么? 如何使用它们?

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


黑洞寄存器 _寄存器/dev/null

我在我的vimrc中使用它来允许删除单个字符而不更新默认寄存器:

noremap x "_x

并以可视模式粘贴而不更新默认寄存器:

vnoremap p "_dP

一个很酷的窍门是使用"1p粘贴最后一次删除/更改(然后使用“ .来重复粘贴后续删除。换句话说, "1p...基本上等同于"1p"2p"3p"4p

你可以使用这个命令来倒序几行: dddddddddd"1p....


一个被忽视的寄存器是'。' 包含最后插入的文本的点寄存器,无论它如何插入,例如ct](更改为]。 然后你意识到你需要在其他地方插入它,但不能使用点重复方法。

 :reg .
 :%s/fred/<C-R>./

其他有用的寄存器

"*"+ - 系统剪贴板的内容

"/ - 最后的搜索命令

": - 最后的命令。

请注意,vim宏可以编辑它们,因为它们只是录制宏时使用的击键列表。 所以你可以写一个文本文件宏(使用"ap来写入宏”)并编辑它们,并将它们加载到一个带有"ay$的寄存器中。 存储有用宏的好方法。


如果您想要在ex-mode命令中粘贴寄存器的内容,请按<Cr><registerletter>

你为什么要用这个? 我想做一个搜索并替换一个很长的字符串,所以我选择它在可视化模式下,开始输入搜索/替换表达式:%s/[PASTE YANKED PHRASE]//g并继续我的一天。

如果您只想在ex模式下粘贴一个单词,可以在进入ex模式之前确保光标位于其上,然后在ex模式下按<Cr><Cw>粘贴该单词。


我使用默认寄存器来grep我的vim窗口中的文本,而不必到达鼠标。

  1. 猛拉文本
  2. :!grep "<CTRL-R>0"<CR>

我最喜欢的关于寄存器的部分之一是使用它们作为宏!

假设您正在处理制表符分隔的值文件,如下所示:

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字段末尾添加百分比符号(从第二行开始)。 我们将在(任意选择的) m寄存器中创建一个简单的宏,如下所示:

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

  2. EE :转到第三栏的末尾。

  3. a :插入模式以追加到本栏末尾。

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

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

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

  7. q :停止录制宏

我们现在只需键入@m就可以在当前行上运行这个宏。 此外,我们可以输入@@重复,或者[email protected]重复100次! 生活看起来不错。

此时你应该说,“ 但是等待,这是否需要使用寄存器进行检查 ?”

优秀点。 让我们通过键入"mp调查m寄存器的内容,然后我们得到以下结果:

EEa%<ESC>j0

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

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

EEa!<ESC>j0

然后,让我们通过键入B"nyE来将它放到n寄存器中,然后,只需要踢,就可以使用@n ....在我们的数据行上运行n

OMG,它增加了一个!

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


我认为秘密大师注册是表达式=注册。 它可以用于创意映射。

:inoremap  \d The current date <c-r>=system("date")<cr>

您可以像上面一样将它与您的系统一起使用,或者获得自定义VimL函数的响应等。

或者只是特别的东西

<c-r>=35+7<cr>

混淆的一个主要来源是默认寄存器" ,了解它的工作方式非常重要,如果大多数情况下避免使用默认寄存器会更好一些Vim文档的解释:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

所以默认寄存器实际上是一个指向最后使用的寄存器的指针。 当你删除或者取消某些东西时,这个寄存器会指向其他寄存器。 您可以通过检查寄存器来测试。 总是有另一个寄存器与默认寄存器完全相同:YANK寄存器( "0 ),第一个删除寄存器( "1 ),小删除寄存器( "- )或用于删除或抽出的任何其他寄存器。

唯一的例外是黑洞登记册。 Vim doc说:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

通常情况下,通过直接使用: "0 "-"1-"9默认寄存器或指定的寄存器,您的状况会好得多。





vi