我在使用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 键的基本内容?
谢谢,
答案 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>