有什么方法可以得到类似xev的模式,在该模式下,我可以按击键和组合键,而vim会打印出我认为要按的键或字符?

特定的相关问题:我有在MacVim和GVim中可用的键绑定(bind),但在终端vim中不起作用,我在屏幕上的SSH上使用Linux。我得出的结论是,原因是因为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认为要按的内容,以便可以相应地编写映射。

最佳答案

  • i切换到插入模式。
  • <C-v>
  • <key>或组合。
  • Vim打印您按下的键/组合键的“原始”值。

  • 在此处(Ubuntu 11.04上的Gnome终端),键入i<C-v>,然后键入<Alt>,然后键入,将显示类似于^[,的内容,表示“转义”。 Alt key (我相信这是您想用于<Meta>的 key )既未被识别为<Meta>也未被识别为<Alt>

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

    在这台机器上
    nnoremap ^[, :split<CR> " ^[ is <C-v><Esc>
    

    确实可以满足我的需求。

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

    这就是为什么我认为您应该使用在任何地方都可以使用的映射,例如:
    :nnoremap <leader>, :split<CR>
    :nnoremap <leader>. :vsplit<CR>
    :nnoremap <leader>/ :close<CR>
    

    默认的<leader> key 为\,但我将其设置为,

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

    参见:help <leader>

    关于vim - 我怎么能看到vim认为我要敲的键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10374615/

    10-11 17:56