Vim中的寄存器允许您对存储在其中的文本运行操作或命令 . 要访问寄存器,请在命令前键入 "a ,其中 a 是寄存器的名称 . 如果要将当前行复制到寄存器 k ,可以键入
“凯
或者您可以使用大写字母附加到注册表中
“Kyy
然后,您可以浏览文档并将其粘贴到其他位置
“kp
从Linux上的系统剪贴板粘贴
“p
从Windows上的系统剪贴板粘贴(或从Linux上的“鼠标突出显示”剪贴板粘贴)
“* p
访问所有当前定义的寄存器类型
:reg
8
当我发现 0 注册时,我很高兴 . 如果您在不将文本分配给特定寄存器的情况下抽取文本,则它将被分配给 0 寄存器,并保存在默认的 " 寄存器中 . 0 和 " 寄存器之间的区别在于 0 仅填充了被填充的文本,而默认寄存器也填充了使用 d / D / x / X / c / C / s / S 命令删除的文本 .
CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
Insert the contents of a numbered or named register. Between
typing CTRL-R and the second character '"' will be displayed
<...snip...>
Special registers:
'"' the unnamed register, containing the text of
the last delete or yank
'%' the current file name
'#' the alternate file name
'*' the clipboard contents (X11: primary selection)
'+' the clipboard contents
'/' the last search pattern
':' the last command-line
'-' the last small (less than a line) delete
'.' the last inserted text
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn't work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
When the result is a |List| the items are used
as lines. They can have line breaks inside
too.
When the result is a Float it's automatically
converted to a String.
See |registers| about registers. {not in Vi}
<...snip...>
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.
16 回答
Vim中的寄存器允许您对存储在其中的文本运行操作或命令 . 要访问寄存器,请在命令前键入
"a
,其中a
是寄存器的名称 . 如果要将当前行复制到寄存器k
,可以键入或者您可以使用大写字母附加到注册表中
然后,您可以浏览文档并将其粘贴到其他位置
从Linux上的系统剪贴板粘贴
从Windows上的系统剪贴板粘贴(或从Linux上的“鼠标突出显示”剪贴板粘贴)
访问所有当前定义的寄存器类型
当我发现
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 .
关于寄存器,我最喜欢的部分之一是将它们用作宏!
假设您正在处理制表符分隔的值文件:
现在您决定需要在%Dev字段的末尾添加百分号(从第2行开始) . 我们将在(任意选择的)
m
寄存器中创建一个简单的宏,如下所示:按:
qm
:在m
寄存器下开始录制宏 .EE
:转到第3列的末尾 .a
:插入模式以追加到此列的末尾 .%
:输入我们要添加的百分号 .<ESC>
:返回命令模式 .j0
:转到下一行的开头 .q
:停止录制宏我们现在只需输入
@m
即可在当前行上运行此宏 . 此外,我们可以输入@@
重复,或100@m
这样做100次!生活看起来很不错 .此时你应该说,“ BUT WAIT, WHAT THE HECK DOES THIS HAVE TO DO WITH REGISTERS ?”
优点 . 让我们通过输入
"mp
来调查m
寄存器的内容 . 然后我们得到以下内容:起初,这看起来像你不小心在记事本中打开了一个二进制文件,但是第二眼, it's the exact sequence of characters in our macro!
你是一个好奇的人,所以让我们做一些有趣的事情并编辑这一行文本以插入一个
!
而不是无聊的旧%
.然后我们通过输入
B"nyE
将其打入n
寄存器 . 然后,只是为了踢,让我们使用@n
在我们的数据行上运行n
宏....OMG, IT ADDED A !
从本质上讲,运行宏就像按下宏的寄存器中的确切键序列 . 如果这不是一个很酷的注册技巧,我会吃掉我的帽子 .
其他有用的寄存器
"*
或"+
- 系统剪贴板的内容"/
- 最后一次搜索命令":
- 最后一个命令 .请注意vim宏,您可以编辑它们,因为它们只是录制宏时使用的击键列表 . 因此,您可以将宏写入文本文件(使用
"ap
编写宏a)并编辑它们,然后将它们加载到注册"ay$
. 存储有用宏的好方法 .black hole register
_
是寄存器的/dev/null
.我在我的vimrc中使用它来允许删除单个字符而不更新默认寄存器:
并以可视模式粘贴而不更新默认寄存器:
如果您想在ex-mode命令中粘贴寄存器的内容,请单击
<C-r><registerletter>
.你为什么要用这个?我想做一个搜索并替换一个长字符串,所以我在可视模式下选择它,开始输入搜索/替换表达式
:%s/[PASTE YANKED PHRASE]//g
并继续我的一天 .如果您只想在ex模式下粘贴单个单词,可以在进入ex模式之前确保光标在其上,然后在ex模式下按
<C-r><C-w>
粘贴单词 .我认为秘密大师寄存器是表达式=寄存器 . 它可用于创意映射 .
您可以将其与上述系统结合使用,或从自定义VimL功能等获取响应 .
或者只是特别的东西
一个很酷的技巧是使用
"1p
粘贴最后一次删除/更改(,然后重复使用.
来粘贴后续删除 . 换句话说,"1p...
基本上等同于"1p"2p"3p"4p
.您可以使用它来反向排序少数几行:
dddddddddd"1p....
从vim的帮助页面:
q5记录编辑到寄存器5(下一个q停止录制)
:reg显示所有寄存器及其中的任何内容
@ 5执行寄存器5宏(录制编辑)
我使用默认寄存器来访问我的vim窗口中的文本,而无需使用鼠标 .
猛拉文字
:!grep "<CTRL-R>0"<CR>
Use registers in commands 与
@
. 例如 . :在命令中设置它们:
现在
"ap
将粘贴abc
.混淆的一个重要原因是默认寄存器
"
. 知道它的工作方式很重要 . 如果大多数时候都避免使用默认寄存器,那就更好了 . Vim文档中的解释:因此,默认寄存器实际上是指向最后使用的寄存器的指针 . 当您删除或抽出某个东西时,该寄存器将指向其他寄存器 . 您可以通过检查寄存器来测试它 . 总是有另一个寄存器与默认寄存器完全相同:yank寄存器(
"0
),第一个删除寄存器("1
),小删除寄存器("-
)或用于删除或抽取的任何其他寄存器 .唯一的例外是黑洞登记 . Vim doc说:
通常,通过直接使用会更好:
"0
,"-
和"1-"9
默认寄存器或命名寄存器 .一个被忽视的注册表是' . '包含最后插入文本的点寄存器,无论它是如何插入的,例如ct](改为直到]) . 然后你意识到你需要将其插入别处,但不能使用点重复方法 .
我最喜欢的注册是
':'
注册 . 在正常模式下运行@:
允许我重复先前运行的ex命令 .我的朋友布莱恩写了一篇关于此的综合文章 . 我认为这是一个很好的介绍如何使用主题 . https://www.brianstorti.com/vim-registers/