显示有序的VIM键盘映射

时间:2012-12-21 12:23:14

标签: vim

有没有显示我当前vim环境的所有键盘映射的有序列表,如下所示:

a: append
b: back one word
c: ...
.
.
.

---- Ctrl mappings ----
<C-a> (I dont know...)
.
.
.
<C-p> Default mode for CrtlP
...

---- Alt mappings ----
...

这对我来说非常有用。

2 个答案:

答案 0 :(得分:5)

:map:verbose map会显示会话中定义的映射列表,但不是这样排序的。 AFAIK,Vim没有提供这么好的格式:你不得不为此编写一个自定义函数,我担心。

修改

另请注意,ab和朋友不是“映射”,因为CtrlP的<C-p>是映射。 :map根本不会显示它们。

所以你的想法虽然很有趣,但可能不是一个可以用一个班轮完成的事情。您可以从:h index中提取信息,添加:map的结果,并尝试按照对您有意义的顺序排列所有内容,但这似乎不是一项微不足道的任务。它听起来非常适合python / ruby​​ / php脚本,不是吗?

EndEdit中

答案 1 :(得分:2)

如果您想要一个有序的,可搜索的当前映射列表,可以在其中查找未使用的密钥,您可以执行以下操作:

function! s:ShowMaps()
  let old_reg = getreg("a")          " save the current content of register a
  let old_reg_type = getregtype("a") " save the type of the register as well
try
  redir @a                           " redirect output to register a
  " Get the list of all key mappings silently, satisfy "Press ENTER to continue"
  silent map | call feedkeys("\<CR>")    
  redir END                          " end output redirection
  vnew                               " new buffer in vertical window
  put a                              " put content of register
  " Sort on 4th character column which is the key(s)
  %!sort -k1.4,1.4
finally                              " Execute even if exception is raised
  call setreg("a", old_reg, old_reg_type) " restore register a
endtry
endfunction
com! ShowMaps call s:ShowMaps()      " Enable :ShowMaps to call the function

nnoremap \m :ShowMaps<CR>            " Map keys to call the function

这是一个强大的功能,可以使用:maps的排序输出创建垂直分割。我把它放在vimrc

最后一行映射两个键 \ m 以调用该函数,根据需要进行更改。

注意:正如@romainl所提到的,这将不包括像 i 这样的命令来插入文本