【问题标题】:in vim, enter is being mapped to a ctrl key custom key map在 vim 中,输入被映射到一个 ctrl 键自定义键映射
【发布时间】:2015-06-11 01:18:29
【问题描述】:

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

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

的内容
:math:`x` 

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

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

我已经这样做了

map m i:math:``ha

这似乎工作正常。

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

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

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

:math:``ha

也是。

这似乎与使用 ctrl 键有关。如果我绑定例如F5键如下

imap <F5> :math:``ha

一切都很好。

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

在我缺少的键映射中使用 ctrl 键是否有一些基本知识?

谢谢你,

【问题讨论】:

    标签: vim mapping


    【解决方案1】:

    您必须为映射使用不同的控件组合,例如&lt;C-g&gt;.

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

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

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

    【讨论】:

    • 感谢您指出这一切。我不知道发生了这些问题。我想我可能会尽量避免在键映射中使用 ctrl 键。正如我所提到的,我也可以使用 F 键之一。
    【解决方案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>*
    

    因此,&lt;c-m&gt;&lt;Enter&gt; 相同(相同的键码 13)

    您也可以在 shell 中进行测试,例如,输入 ls 然后输入 &lt;c-m&gt; 而不是 &lt;Enter&gt;

    【讨论】:

    • 好吧,我不知道 CTRL-M 是 shell 中的回车等。感谢您指出这一点。 vim 的行为现在很有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多