0

假设我创建了一个向下一行的宏。

qajq

寄存器a包含完全qajq,因此@a将我移到了一行。

现在假设我输入j我的缓冲区并a使用"ayy. 现在,寄存器a看起来像j^J(注意终端换行有向图)。现在,当我执行宏时a,它会跳下两行。

这里到底发生了什么?Vim 是否看到有^J向图并认为我想多写一行,还是更微妙的东西?

我想这是答案之一,“因为它就是这样设计的。” :P

4

2 回答 2

2

键入后qajq注册a内容就是字符串jqa开始将宏录制到 registera中,然后您键入j它是第一个字符记录器,现在您键入q并且 vim 停止录制。所以,你最终只j在寄存器中a

该命令yy按行工作,因此换行符也插入到寄存器中。当您键入时,"ayy您最终会出现j^Ja寄存器中,因为^Jor Ctrl-J(换行符)是 vim 用来表示换行符的,并且它还会将光标向下移动一行,如中所述:help Ctrl-J

为了在没有换行符的情况下拉出行,您可以键入0"ay$. 这与打字相同qajq

于 2017-06-28T00:34:44.073 回答
0

我不确定你的 vim 上会发生什么。但我会说 vim 应该作为正确的行为。

你键入qajq. 所以运动j被注册到寄存器a中。而且您似乎yy将某些内容注册到 register a。但据我所知,它注册成 register"而不是 register a。要将某些内容拉入寄存器a,您应该键入"ayy. 可以通过:register命令确认。也许打字有问题?

于 2017-06-28T00:26:42.190 回答