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

在vim中,enter被映射到ctrl键自定义键映射,vim,mapping,Vim,Mapping,我在vim中遇到了一些使用ctrl键的键映射的奇怪行为。我想这有一个简单的原因和解决办法,但我就是看不出来 在编辑StructuredText的过程中,我发现自己输入了如下内容 :math:`x` 通常(此:math:role将导致记号中的内容在latex输出中被打印为math) 我想将像m这样的键映射到文本中,输入:math:``并将光标定位在刻度内 我已经这样做了 map m i:math:``ha 这似乎很有效 但是,我希望能够在插入模式下使用此映射。为此,我认为使用ctrl+m是最

我在vim中遇到了一些使用ctrl键的键映射的奇怪行为。我想这有一个简单的原因和解决办法,但我就是看不出来

在编辑StructuredText的过程中,我发现自己输入了如下内容

:math:`x` 
通常(此:math:role将导致记号中的内容在latex输出中被打印为math)

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

我已经这样做了

map m i:math:``ha
这似乎很有效

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

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

似乎这肯定与使用ctrl键有关。如果我按如下方式绑定F5键

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

我可以使用F5键,省去更多麻烦,但我想知道发生了什么,以备将来参考

在键映射中使用ctrl键是否有我所缺少的一些基本信息

谢谢,

如果您愿意

: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>*
表示等效十进制值的符号~
-----------------------------------------------------------------------
....
回车符CTRL-M 13*回车符*
同**
同**
所以它告诉我们,
相同(相同的键码13)


您也可以在shell中进行测试,例如,键入
ls
,然后键入
,而不是
,您必须为映射使用不同的控件组合,例如

由于键盘输入是在内部处理的,不幸的是,即使在GVIM中,如果没有这些副作用,今天也不可能做到这一点。某些组合键(如Ctrl+非字母键)无法映射,并且无法区分Ctrl+字母与Ctrl+Shift+字母。(除非您的终端为其发送了一个不同的termcap代码,而大多数情况下不会)。这也适用于
/
/
等。(唯一的例外是
/
)这是一个已知的痛点,以及关于vim#u dev和#vim IRC频道的各种讨论的主题

一些人(最重要的是Paul LeoNerd Evans)希望解决这一问题(即使是支持这一点的终端中的console Vim),并提出了各种建议,cp


但是到今天为止,还没有任何补丁或志愿者发布,尽管许多人表示希望在未来的Vim 8主要版本中发布这些补丁。

感谢您指出这一切。我不知道发生了这些问题。我想我可能会尽量避免在键映射中使用ctrl键。正如我提到的,其中一个F键对我来说也很好。我不知道CTRL-M是一个在shell中的回车键等等。谢谢你指出这一点。vim的行为现在很有意义。
notation    meaning         equivalent  decimal value(s)    ~
-----------------------------------------------------------------------
....

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