我将以下文本复制到"0
寄存器
test
test
如果我想将
"0
寄存器的内容复制到"a
寄存器,我会这样做:let @a=@0
然后,如果我粘贴
"a
寄存器的内容,我会得到test test
现在,要将
"0
寄存器的内容粘贴到我做的"a
寄存器:let @a="
然后
<C-r>0
,结果是这样的:let @a="test^Mtest^M"
然后我粘贴
"a
寄存器("ap
)的内容,我得到test^Mtest^M
为什么结果不相等?
具体来说,为什么换行符是字面意思而不是在第二种情况下解释的?
从:help c_ctrl-r
:
[...]并且从字面上插入结束命令行的字符(
<Esc>
、<CR>
、<NL>
、<C-C>
)。[...]
---编辑---
<C-r>0
插入"0
的内容,就像您键入的内容一样。由于"0
包含一个<CR>
(实际上是两个,但第二个无关紧要):
test<CR>
test<CR>
该<CR>
将像键入它一样键入,这将导致在键入完成之前执行命令:
:let @a = "test<CR>
这会因为缺少"
而抛出E114
.
这里的折衷方案是插入文字^M
而不是键入<CR>
以允许完成命令行。
:let @a = @0
没有这个问题,因为没有类型,也不涉及 I/O:它只是传递值。