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

mja*_*ews 4 mapping vim

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

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

:math:`x` 
Run Code Online (Sandbox Code Playgroud)

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

我想映射一个键,如m输入:math:``进入文本并将光标定位在刻度内.

我做到了这一点

map m i:math:``ha
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.

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

imap <c-m> :math:``ha
Run Code Online (Sandbox Code Playgroud)

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

:math:``ha
Run Code Online (Sandbox Code Playgroud)

同样.

看起来它肯定与使用ctrl密钥有关.如果我F5按如下方式绑定密钥

imap <F5> :math:``ha
Run Code Online (Sandbox Code Playgroud)

一切都好.

我可以使用eg F5键并为自己节省更多麻烦,但我想知道将来会发生什么.

ctrl在关键地图中使用密钥是否存在基本缺失?

谢谢,

Ing*_*kat 7

您必须为映射使用不同的控件组合,例如<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主要版本中使用它.