【发布时间】:2013-03-11 00:43:13
【问题描述】:
我有两个关于 vim 映射的问题,例如 imap 和递归。在 Vim 中,映射既可以是右递归的,也可以既不是左递归的也不是右递归的,但它们不允许是左递归的,对吧?为什么不?我测试了以下示例来说明我的意思:
-
(左递归)当我执行时
:imap x xyz然后在插入模式下输入“x”,输入到缓冲区的内容是
xyz据我所知,如果我使用 inoremap 而不是 imap,这种行为与会发生的情况无法区分。
-
(既不是左递归也不是右递归)当我执行时
:imap x yxz然后在插入模式下输入“x”,缓冲区中的(试图)是什么
y...yz -
(右递归)当我执行时
:imap x yzx然后在插入模式下输入“x”,缓冲区中的(试图)是什么
yzyzyzyzyzyz... -
(相互递归)当我执行时
:imap x abc :imap a x然后在插入模式下输入“x”,我会收到“E223:递归映射”。
似乎我已经证明 Vim 不允许左递归映射和相互递归映射,但我想验证一下:在 Vim 中定义(可能相互)递归映射的规则是什么?强>
【问题讨论】:
-
但是……为什么?!递归映射的唯一有效用途是让它一直应用到它在缓冲区结束时出错。
-
@IngoKarkat,为什么不呢? Vim 允许这样做,所以我想知道它们是如何工作的。您确定您给出的用例是唯一有效使用(可能是相互的)递归映射吗?