假设我创建了一个向下一行的宏。
qajq
寄存器a
包含完全qajq
,因此@a
将我移到了一行。
现在假设我输入j
我的缓冲区并a
使用"ayy
. 现在,寄存器a
看起来像j^J
(注意终端换行有向图)。现在,当我执行宏时a
,它会跳下两行。
这里到底发生了什么?Vim 是否看到有^J
向图并认为我想多写一行,还是更微妙的东西?
我想这是答案之一,“因为它就是这样设计的。” :P
键入后qajq
注册a
内容就是字符串j
。qa
开始将宏录制到 registera
中,然后您键入j
它是第一个字符记录器,现在您键入q
并且 vim 停止录制。所以,你最终只j
在寄存器中a
。
该命令yy
按行工作,因此换行符也插入到寄存器中。当您键入时,"ayy
您最终会出现j^J
在a
寄存器中,因为^J
or Ctrl-J
(换行符)是 vim 用来表示换行符的,并且它还会将光标向下移动一行,如中所述:help Ctrl-J
为了在没有换行符的情况下拉出行,您可以键入0"ay$
. 这与打字相同qajq
。
我不确定你的 vim 上会发生什么。但我会说 vim 应该作为正确的行为。
你键入qajq
. 所以运动j
被注册到寄存器a
中。而且您似乎yy
将某些内容注册到 register a
。但据我所知,它注册成 register"
而不是 register a
。要将某些内容拉入寄存器a
,您应该键入"ayy
. 可以通过:register
命令确认。也许打字有问题?