4

我在 vim 中使用 ctrl 键的键盘映射遇到一些奇怪的行为。我猜这有一个简单的原因和解决方案,但我只是看不到它。

在编辑重组文本的过程中,我发现自己在输入类似的东西

:math:`x` 

通常(这个 :math: 角色将导致刻度内的任何内容在例如乳胶输出中被排版为数学)。

我想将一个像m输入:math:`` 的键映射到文本中,并将光标定位在刻度内。

我已经做到了

map m i:math:``ha

这似乎工作正常。

但是,我希望能够在插入模式下使用此地图。为此,我认为使用ctrl+m是最好的。我弄完了

imap <c-m> :math:``ha

ctrl虽然正确输入 :math:`` 并在我执行+时将光标定位在刻度内m,但问题在于,在此之后,每次我在插入模式下按下时,它都会运行与我键入+enter相同的命令。换句话说,以插入模式输入现在似乎映射到ctrlm

:math:``ha

也是。

似乎这绝对与使用ctrl密钥有关。F5如果我按如下方式绑定例如密钥

imap <F5> :math:``ha

一切安好。

我可以使用 egF5键并为自己省去更多麻烦,但我想知道发生了什么以供将来参考。

ctrl在我缺少的键映射中使用键有什么基本的吗?

谢谢你,

4

2 回答 2

8

您必须为映射使用不同的控制组合,例如<C-g>.

由于键盘输入在内部处理的方式,不幸的是,如果没有这些副作用,即使在 GVIM 中,今天通常也无法做到这一点。某些组合键,如Ctrl+ 非字母无法映射,Ctrl+ 字母与Ctrl+ Shift+ 字母无法区分。(除非您的终端为它发送一个独特的termcap代码,而大多数人不会。)这也适用于<Tab>/ <C-I><CR>/ <C-M>/ <Esc>/<C-[>等。(唯一的例外是<BS>/ <C-H>。)这是一个已知的痛点,也是各种讨论的主题在 vim_dev 和 #vim IRC 频道上。

一些人(最重要的是 Paul LeoNerd Evans)想要解决这个问题(即使是支持这个的终端中的控制台 Vim),并提出了各种建议,cp。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

但是截至今天,还没有补丁或志愿者出现,尽管许多人表示希望在未来的 Vim 8 主要版本中拥有它。

于 2013-04-02T16:00:53.843 回答
2

如果你做一个

:h keycodes

你会看见:

notation    meaning         equivalent  decimal value(s)    ~
-----------------------------------------------------------------------
....

<CR>        carriage return     CTRL-M   13 *carriage-return*
<Return>    same as <CR>                *<Return>*
<Enter>     same as <CR>                *<Enter>*

所以它告诉我们,<c-m><Enter>(相同的键码 13)相同

你也可以在你的shell中测试,例如,输入ls然后<c-m>而不是<Enter>

于 2013-04-02T15:55:52.757 回答