在vim中,enter被映射到ctrl键自定义键映射

时间:2013-04-02 15:45:46

标签: vim mapping

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

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

的内容
:math:`x` 

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

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

我已经完成了这个

map m i:math:``ha

这似乎工作正常。

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

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

虽然正确输入:math:``并且当我执行 ctrl + m 时将光标定位在刻度内,问题是在此之后,每次都是我在插入模式下按输入,它运行的命令就像输入 ctrl + m 一样。换句话说,现在进入插入模式似乎映射到

:math:``ha

看起来它肯定与使用 ctrl 键有关。如果我绑定例如 F5 键如下

imap <F5> :math:``ha
一切都很好。

我可以使用例如 F5 键并为自己保留任何进一步的麻烦,但我想知道将来会发生什么。

在我错过的键映射中是否存在使用 ctrl 键的基本内容?

谢谢,

2 个答案:

答案 0 :(得分:7)

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

由于键盘输入在内部处理的方式,遗憾的是,如果没有这些副作用,即使在GVIM中也是如此。某些组合键,例如 Ctrl +非字母无法映射, Ctrl + letter vs. Ctrl + Shift +字母无法区分。 (除非您的终端为其发送了不同的 termcap 代码,但大多数代码都没有。)这也适用于<Tab> / <C-I><CR> / {{ 1}} / <C-M> / <Esc>等(只有例外<C-[> / <BS>。)这是一个众所周知的痛点,也是关于vim_dev和#vim IRC频道。

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

但截至今天,尚未有任何补丁或志愿者挺身而出,尽管许多人表示希望在未来的Vim 8主要版本中有这个。

答案 1 :(得分:1)

如果你做了

: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>