使用:map
提供Vim中所有映射的列表。但是,我无法搜索列表。我很惊讶地看到它在不同类型的窗口中打开,这与通常的Vim帮助文件不同。有没有办法以通常的形式提供它?
答案 0 :(得分:8)
Vim使用其内部寻呼机显示:map
的输出,其功能非常有限(有关详细信息,请参阅:h pager
)。
如果要在普通的vim缓冲区中访问:map
的输出,可以使用:redir
:
:redir @a> " redirect output to register a
:map
:redir END
:put a " paste the output of :map in the current buffer
请注意,您可以重定向到文件,变量等...有关详细信息,请参阅:h redir
。
答案 1 :(得分:5)
:map
与:help
完全没有关联,因此没有理由期望它像:help
一样工作。
您可以给:map
一个参数来缩小列表范围:
:map ,
使用wildmenu
和/或wildmode
的正确值,您可以选项卡完成:map
:
:map ,<Tab>
您还可以使用<C-d>
列出当前映射:
:map <C-d>
您还可以使用:map
的模式特定变体来获得更易于管理的列表:
:imap ,
:nmap ,
:xmap ,
and so on…
但请记住,:map
仅列出自定义映射(由您或您的插件制作)。如果您需要默认映射列表,请查看:help index
。
答案 2 :(得分:4)
这是一个强大的功能,可以使用:maps
的排序输出创建可搜索的垂直分割
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
最后一行映射两个键 \ m 以调用该函数,根据需要进行更改。