0" 和@a=@0,vim,vim-registers,vim-macros"/>

首页 > 解决方案 > @a=" 之间的区别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
    

为什么结果不相等?

具体来说,为什么换行符是按字面写的,而不是在第二种情况下解释?

标签: vimvim-registersvim-macros

解决方案


来自: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 参与:它只是传递的值。


推荐阅读