显示有序的VIM键盘映射

显示有序的VIM键盘映射,vim,Vim,是否可以显示当前vim环境的所有键盘映射的有序列表,如下所示: a: append b: back one word c: ... . . . ---- Ctrl mappings ---- <C-a> (I dont know...) . . . <C-p> Default mode for CrtlP ... ---- Alt mappings ---- ... a:append b:回一个字 c:。。。 . . . ----Ctrl映射---- (我不知道……

是否可以显示当前vim环境的所有键盘映射的有序列表,如下所示:

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

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

---- Alt mappings ----
...
a:append
b:回一个字
c:。。。
.
.
.
----Ctrl映射----
(我不知道……)
.
.
.
CrtlP的默认模式
...
----Alt映射----
...

这对我非常有用。

:map
:verbose map
显示会话中定义的映射列表,但它们的顺序不是这样的。顺便说一句,Vim并没有提供这么好的格式:恐怕您必须为此编写一个自定义函数

编辑

另外,请注意,
a
b
和朋友不是“映射”,因为CtrlP的
是映射<代码>:地图根本不会显示它们

所以,你的想法虽然有趣,但可能不是一行就可以做到的。您可以从
:h index
中提取信息,添加
:map
的结果,并尝试按照对您有意义的顺序安排所有这些内容,但这似乎不是一项简单的任务。听起来它非常适合python/ruby/php脚本,不是吗


endedit

如果您想要当前映射的排序、可搜索列表,以便在其中查找未使用的键,可以执行以下操作:

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
函数!s:ShowMaps()
让old_reg=getreg(“a”)”保存寄存器a的当前内容
让old_reg_type=getregtype(“a”)也保存寄存器的类型
尝试
redir@a“将输出重定向到寄存器a
以静默方式获取所有键映射的列表,满足“按ENTER键继续”
无声映射|调用feedkeys(“\”)
“重拨结束”结束输出重定向
vnew“垂直窗口中的新缓冲区
放置一个“放置”寄存器的内容
“按第4个字符列排序,该列为键”
%!排序-k1.4,1.4
最后,“即使引发异常也执行”
调用setreg(“a”,old_reg,old_reg_type)”恢复寄存器a
末日
端功能
通用域名格式!ShowMaps调用s:ShowMaps()“启用:ShowMaps以调用函数
nnoremap\m:ShowMaps“映射键以调用函数
这是一个强大的函数,用于创建带有排序输出
:maps
的垂直分割。我把它放在我的
vimrc

最后一行映射了两个键\m要调用函数,请随意更改


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

这个答案可能会有帮助:帮助索引看起来不错,但它并没有显示我的插件快捷方式。我认为存在类似的东西,我的想法是用它来帮助VIM新手。稍后我将尝试编写一个脚本来完成此操作。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-谢谢你的反馈。我现在已经包括了代码。