How to search in the Vim mapping listing?

前端 未结 3 1108
失恋的感觉
失恋的感觉 2021-02-07 12:22

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

相关标签:
3条回答
  • 2021-02-07 12:54

    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.

    0 讨论(0)
  • 2021-02-07 12:58

    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.

    0 讨论(0)
  • 2021-02-07 13:02

    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.

    0 讨论(0)
提交回复
热议问题