为什么宏中的换行符被解释为 Vim 中的 `j`?
Why does a newline digraph in a macro get interpreted as a `j` in Vim?
假设我创建了一个下一行的宏。
qajq
注册 a
恰好包含 qajq
,因此 @a
将我移到下一行。
现在假设我在我的缓冲区中键入 j
并使用 "ayy
将其拉入寄存器 a
。现在,注册 a
看起来像 j^J
(注意终端换行符)。现在,当我执行宏 a
时,它会跳下两行。
这里到底发生了什么? Vim 是否看到 ^J
有向图并认为我想多写一行,还是更微妙的东西?
我猜这是其中一个答案是 "because that's how it was designed." :P
我不确定你的 vim 上发生了什么。但我会说 vim 应该作为正确的行为。
您键入 qajq
。所以运动 j
被注册到寄存器 a
中。而且您似乎键入 yy
来将某些内容注册到寄存器 a
中。但据我所知,它注册到寄存器 "
而不是寄存器 a
。要将某些内容拖入寄存器 a
,您应该键入 "ayy
。可以用 :register
命令确认。可能输入有误?
在你键入 qajq
之后,a
注册的内容是字符串 j
。 qa
开始记录宏到寄存器a
,然后你输入j
,它是第一个字符记录器,现在你输入q
,vim停止记录。所以,你最终在寄存器 a
.
中只有 j
命令yy
按行工作,因此换行符也被插入到寄存器中。当您键入 "ayy
时,您最终会在 a
寄存器中得到 j^J
,因为 ^J
或 Ctrl-J
(换行符)是 vim 使用的表示换行符,它还会将光标向下移动一行,如 :help Ctrl-J
中所述
为了在没有换行符的情况下抽出行,您可以键入 0"ay$
。这与键入 qajq
.
相同
假设我创建了一个下一行的宏。
qajq
注册 a
恰好包含 qajq
,因此 @a
将我移到下一行。
现在假设我在我的缓冲区中键入 j
并使用 "ayy
将其拉入寄存器 a
。现在,注册 a
看起来像 j^J
(注意终端换行符)。现在,当我执行宏 a
时,它会跳下两行。
这里到底发生了什么? Vim 是否看到 ^J
有向图并认为我想多写一行,还是更微妙的东西?
我猜这是其中一个答案是 "because that's how it was designed." :P
我不确定你的 vim 上发生了什么。但我会说 vim 应该作为正确的行为。
您键入 qajq
。所以运动 j
被注册到寄存器 a
中。而且您似乎键入 yy
来将某些内容注册到寄存器 a
中。但据我所知,它注册到寄存器 "
而不是寄存器 a
。要将某些内容拖入寄存器 a
,您应该键入 "ayy
。可以用 :register
命令确认。可能输入有误?
在你键入 qajq
之后,a
注册的内容是字符串 j
。 qa
开始记录宏到寄存器a
,然后你输入j
,它是第一个字符记录器,现在你输入q
,vim停止记录。所以,你最终在寄存器 a
.
j
命令yy
按行工作,因此换行符也被插入到寄存器中。当您键入 "ayy
时,您最终会在 a
寄存器中得到 j^J
,因为 ^J
或 Ctrl-J
(换行符)是 vim 使用的表示换行符,它还会将光标向下移动一行,如 :help Ctrl-J
为了在没有换行符的情况下抽出行,您可以键入 0"ay$
。这与键入 qajq
.