在vim中:
:map
列出所有关键映射:map {lhs}
列出以{lhs}开头的键序列的所有键映射。如何搜索"所有以控制键开头的键映射" ?
(我知道我仍然可以列出所有映射,将输出重定向到文件和grep;但效率不高)。
谢谢!
答案 0 :(得分:4)
不,没有直接的,内置的方法。
你能做的是:
:redir @a redirect output of next command to register a
:map list mappings
:redir END end redirection
:vnew edit new buffer in vertical window
:put a put content of register a
:v/<C-/d delete all lines not matching '<C-'
你可以轻松转变成一个功能。
答案 1 :(得分:1)
如果您想要一个可排序的,可搜索的:maps
输出列表,可在其中搜索<C-
,您可以执行以下操作:
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 以调用该函数,根据需要进行更改。
注意:这将不包括vim的默认命令,如 Ctrl-a 来增加数字,因为它们不是map
。有关这些内容,请参阅:help index
。