Using :map
provides a list of all mappings in Vim. But, I am unable to search through the list. I am surprised to see it being opened in a different type of window
Don't be surprised. :map
is not related at all with :help
so there's no reason whatsoever to expect it to work like :help
.
You can give :map
an argument to narrow-down the listing:
:map ,
With the right values for wildmenu
and/or wildmode
, you can tab-complete :map
:
:map ,<Tab>
You can also list the current mappings with <C-d>
:
:map <C-d>
You can also use the mode-specific variants of :map
to get a more manageable list:
:imap ,
:nmap ,
:xmap ,
and so on…
But keep in mind that :map
only lists custom mappings (made by you or your plugins). If you want a list of default mappings, check out :help index
.
Here's a robust function to create a searchable vertical split with the sorted output of :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
The last line maps the two keys \m to call the function, change this as you wish.
Vim uses its internal pager to display the output of :map
, which has pretty limited functionalities (see :h pager
for more info).
If you want to access the output of :map
in a normal vim buffer, you could use :redir
:
:redir @a> " redirect output to register a
:map
:redir END
:put a " paste the output of :map in the current buffer
Note that you can redirect to a file, to a variable, etc... See :h redir
for more details.