@a= "<C-r>0" 和 @a=@0 之间的区别



我将以下文本复制到"0寄存器

test
test
  1. 如果我想将"0寄存器的内容复制到"a寄存器,我会这样做

    :let @a=@0
    

    然后,如果我粘贴"a寄存器的内容,我会得到

    test
    test
    
  2. 现在,要将"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:它只是传递值。

相关内容

  • 没有找到相关文章

最新更新