12

有没有办法获得类似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 正在捕获击键,但它会将它们解释为除<M-,>示例之外的其他内容。

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

4

1 回答 1

12
  1. i切换到插入模式。
  2. <C-v>.
  3. <key>或组合。
  4. Vim 打印你按下的键/组合的“原始”值。

在这里(Ubuntu 11.04 上的 Gnome 终端),键入i<C-v>,然后是<Alt>,然后,打印一些看起来像^[,“Escape”的东西。密钥(我相信这Alt是您想要用于的<Meta>)既不被识别为<Meta>也不被识别为<Alt>.

直接的结论是 CLI Vim 不喜欢<M->(而且许多终端仿真器无论如何都不能很好地处理它)。一些终端仿真器允许您将<Alt>密钥映射到,Meta但它不是一个完美的跨平台解决方案(我<Alt>在 Mac OS X 上使用了很多来输入特殊字符)。

在这台机器上,

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

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

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

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

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

默认<leader>键是\,但我已将其设置为,.

请注意,您不需要使用<leader>key, 只需映射,,,.并且,/也可以使用。

:help <leader>

于 2012-04-29T19:30:17.390 回答