假设我创建了一个向下一行的宏。
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寄存器中,因为^Jor Ctrl-J(换行符)是 vim 用来表示换行符的,并且它还会将光标向下移动一行,如中所述:help Ctrl-J
为了在没有换行符的情况下拉出行,您可以键入0"ay$. 这与打字相同qajq。
我不确定你的 vim 上会发生什么。但我会说 vim 应该作为正确的行为。
你键入qajq. 所以运动j被注册到寄存器a中。而且您似乎yy将某些内容注册到 register a。但据我所知,它注册成 register"而不是 register a。要将某些内容拉入寄存器a,您应该键入"ayy. 可以通过:register命令确认。也许打字有问题?