简体   繁体   中英

How to search in the Vim mapping listing?

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 unlike usual Vim help files. Is there a way to have it available in the usual form?

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.

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 <Cd> :

: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.

对于neovim,望远镜具有开箱即用的映射列表和搜索功能: builtin.keymaps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM