有没有可以显示我当前 vim 环境的所有键盘映射的有序列表,如下所示:
a: append
b: back one word
c: ...
.
.
.
---- Ctrl mappings ----
<C-a> (I dont know...)
.
.
.
<C-p> Default mode for CrtlP
...
---- Alt mappings ----
...
这对我来说非常有用。
有没有可以显示我当前 vim 环境的所有键盘映射的有序列表,如下所示:
a: append
b: back one word
c: ...
.
.
.
---- Ctrl mappings ----
<C-a> (I dont know...)
.
.
.
<C-p> Default mode for CrtlP
...
---- Alt mappings ----
...
这对我来说非常有用。
:map
并向:verbose map
您显示会话中定义的映射列表,但它们的顺序不是这样。AFAIK,Vim 没有提供这么好的格式:恐怕你必须为此编写一个自定义函数。
编辑
另外,请注意a
,b
和朋友不是“映射”,因为 CtrlP<C-p>
是一个映射。:map
根本不会显示它们。
因此,您的想法虽然很有趣,但可能不是一个班轮可以完成的事情。您可以从中提取信息:h index
,添加结果:map
并尝试按照对您有意义的顺序排列所有这些,但这似乎不是一项微不足道的任务。这听起来非常适合 python/ruby/php 脚本,不是吗?
结束编辑
如果您想要一个排序的、可搜索的当前映射列表来查找未使用的键,您可以执行以下操作:
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插入文本之类的命令
您还可以使用FZF 插件,它为您提供的命令与在可模糊搜索的弹出窗口中显示:Maps
相同的信息。:verbose map
它与 Tom Hales 的回答基本相同,但是是 fzf 版本。我已将其映射到<leader>F1
.