【问题标题】:How can I see what keys vim thinks I'm hitting?我怎样才能看到 vim 认为我在敲什么键?
【发布时间】:2012-05-09 14:49:04
【问题描述】:

有没有办法获得类似 xev 的模式,我可以在其中按键和组合键,vim 会打印出它认为我正在按下的键或字符?

具体相关问题:我有在 MacVim 和 GVim 中工作的键绑定,但它们在终端 vim 中不起作用,我在 Linux 上通过 SSH 在屏幕内使用它。我得出的结论是,原因是 vim 认为我按下的键与 MacVim 对它们的解释不同。

在我的 .vimrc 中:

map <M-,> :split<CR> " Horizontal split
map <M-.> :vsplit<CR> " Vertical split
map <M-/> :close<CR>

在我的 vim 的 :map 中(MacVim 显示相同):

¯             :close<CR><Space>
®             :vsplit<CR> " Vertical split
¬             :split<CR> " Horizontal split

它适用于 MacVim 和 GVim,但不适用于任何基于终端的 vim。我已经在多个终端(OSX 终端和 Term2、KDE ​​终端、Gnome 终端等)中进行了尝试。我也用其他修饰符和键组合见证了这一点。似乎 vim 正在捕获击键,但它会将它们解释为 &lt;M-,&gt; 以外的其他东西。

我很想有办法找出 vim 认为我在按下什么,以便我可以相应地编写映射。

【问题讨论】:

    标签: vim


    【解决方案1】:
    1. i 切换到插入模式。
    2. &lt;C-v&gt;
    3. &lt;key&gt; 或组合。
    4. Vim 会打印您按下的键/组合的“原始”值。

    在这里(Ubuntu 11.04 上的 Gnome 终端),输入 i&lt;C-v&gt;,然后是 &lt;Alt&gt;,然后是 ,,会打印出看起来像 ^[, 的东西,意思是“Escape”。 Alt 键(我相信这是您想要用于 &lt;Meta&gt; 的键)既不能识别为 &lt;Meta&gt; 也不能识别为 &lt;Alt&gt;

    直接的结论是 CLI Vim 不喜欢&lt;M-&gt;(而且许多终端仿真器也不能很好地处理它)。一些终端模拟器允许您将&lt;Alt&gt; 键映射到Meta,但这不是一个完美的跨平台解决方案(我在 Mac OS X 上经常使用&lt;Alt&gt; 来输入特殊字符)。

    在这台机器上,

    nnoremap ^[, :split<CR> " ^[ is <C-v><Esc>
    

    不过,这正是我认为你想要的。

    如果您绝对想在 GUI 和 CLI 中继续使用&lt;M-&gt; 快捷方式,则需要维护两组单独的快捷方式。如果您的.vimrc 中有几十个自定义映射,很快就会变得有点难以管理。

    这就是为什么我认为您应该使用适用于任何地方的映射,例如:

    :nnoremap <leader>, :split<CR>
    :nnoremap <leader>. :vsplit<CR>
    :nnoremap <leader>/ :close<CR>
    

    默认的&lt;leader&gt; 键是\,但我已将其设置为,

    请注意,您不需要使用&lt;leader&gt;key,只需映射,,,.,/ 也可以。

    :help &lt;leader&gt;

    【讨论】:

    • 这是否意味着将^[, 映射到:vsplit&lt;CR&gt; 应该允许&lt;M-,&gt; 在CLI Vim 中工作?我也无法完成这项工作。另外,您是否暗示修饰键通常在 CLI Vim 中表现不佳?我应该坚持使用单个按键吗?
    • 看我的回答,它不是乱七八糟的^[^ 后跟[),它是一个看起来像^[ 的单个字符。您可以通过按&lt;C-v&gt;&lt;Esc&gt;获得它。
    • 我已经编辑了我的答案以更精确。修饰键不保证在 CLI Vim 中有效:很多 &lt;C-&gt; 组合已经有一些含义,你不能同时使用 &lt;C-&gt;&lt;S-&gt;。所以是的,我的建议是忘记 CLI Vim 中的修饰键 both 和 GUI Vim 中的。我的&lt;leader&gt; 映射无处不在,我不必在记忆中保留两组映射。
    • 感谢您的帮助,@romainl。我已经确认 MacVim 确实在原始输出模式下为这些映射输出了这些字符?插入模式下的 有名字吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2021-11-25
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多