开发者

Is there any way to view the currently mapped keys in Vim?

Basically, I'd like to view all of the keys maps made in the current buffer by all of plugins, vimrc, etc, in the current buffer. Is there anyway to do t开发者_高级运维his?


You can do that with the :map command. There are also other variants.

  • :nmap for normal mode mappings
  • :vmap for visual mode mappings
  • :imap for insert mode mappings

The above list is not complete. Typing :help map in Vim will give you more info.


:redir! > vim_keys.txt
:silent verbose map
:redir END

This outputs the shortcuts, with where they were defined, to a text file.


In addition to answers about :map with no arguments: do not miss its verbose form (:verbose map) which shows where the mapping(s) was defined (see :help map-verbose).


Quite simply, just run the :map variants with no arguments.

:map
:imap
:vmap


:map and its friends are the key, :verbose adds info and :redir allow post-search refinement.

They are a perfect mix to show what command is bind to what shortcut and viceversa, but if you want to search some keys and avoid temp files whenever you need to search mappings, take a look to scriptease and :Verbose command.

It is a wrapper on :verbose to show result in a preview window.

this way you can search whatever you want inside results without using temp files

type :Verbose map and use / ? as usual.


Another way is to save session to a file and then edit this file as it contains all the mappings and settings.

:mks[ession] [file] - Write a Vim script that restores the current editing session.


  1. Install this plug like this: Plug 'https://github.com/tpope/vim-scriptease'

  2. What to know what <M-C-F10>(my own mapping) does? try this

:Verbose nmap <M-C-F10> |  omap <M-C-F10> | vmap <M-C-F10> | imap <M-C-F10> | cmap <M-C-F10> | tmap <M-C-F10>

put it in a function:

            func! Leo_keymap(keys)
                exe "verbose map " . a:keys
                exe "verbose map! " . a:keys
                exe "verbose tmap " . a:keys

                " 不好 / not good:
                    " exe "verbose nmap " . a:keys
                    " exe "verbose omap " . a:keys
                    " exe "verbose vmap " . a:keys
                    " exe "verbose imap " . a:keys
                    " exe "verbose cmap " . a:keys
                    " exe "verbose tmap " . a:keys
                " 不行 / not work
                    " exe "Verbose map " . a:keys  . <Bar> . "verbose map! " . a:keys . <Bar> .  "verbose tmap " . a:keys
            endfunc

        cnoreabbrev <expr> map   getcmdtype() == ":" && getcmdline() == 'map'          ? 'Verbose call Leo_keymap("")<left><left>'                       :   'map'
                " 不行 / not work
                    " command! -nargs=* Map :new<CR>:put = Vim_out('call Leo_keymap(input())')
                " 不行 / not work
                    " :put = Vim_out("call Leo_keymap('ls')")

        " may be take placed by the above line
            cnoreabbrev <expr> nmap  getcmdtype() == ":" && getcmdline() == 'nmap'          ? 'Verbose map'                       :   'map'
            cnoreabbrev <expr> imap  getcmdtype() == ":" && getcmdline() == 'imap'         ? 'Verbose imap'                      :   'imap'
            cnoreabbrev <expr> cmap  getcmdtype() == ":" && getcmdline() == 'cmap'         ? 'Verbose cmap'                      :   'cmap'
            cnoreabbrev <expr> tmap  getcmdtype() == ":" && getcmdline() == 'tmap'         ? 'Verbose tmap'                      :   'tmap'


old content, may be useless:

func! Leo_keymap(keys)
    exe "verbose map " . a:keys
    exe "verbose map! " . a:keys
    exe "verbose tmap " . a:keys
    " exe "Verbose map " . a:keys  . <Bar> . "verbose map! " . a:keys . <Bar> .  "verbose tmap " . a:keys
    " exe "verbose nmap " . a:keys
    " exe "verbose omap " . a:keys
    " exe "verbose vmap " . a:keys
    " exe "verbose imap " . a:keys
    " exe "verbose cmap " . a:keys
    " exe "verbose tmap " . a:keys
endfunc

command! -nargs=* Map :call Leo_keymap(<q-args>)

now :Map d gets:

n  dL          * v$hhd
        Last set from ~/dotF/cfg/nvim/plug_wf.vim line 712
n  df          * ggdG
        Last set from ~/dotF/cfg/nvim/clipboard_regis.vim line 250
n  dB          * %dab
        Last set from ~/dotF/cfg/nvim/clipboard_regis.vim line 230
n  d"          * da"
        Last set from ~/dotF/cfg/nvim/clipboard_regis.vim line 212
n  dw          * diw
        Last set from ~/dotF/cfg/nvim/clipboard_regis.vim line 211
n  d'          * :call DoubleAsSingle()<CR>da'
        Last set from ~/dotF/cfg/nvim/clipboard_regis.vim line 195
No mapping found
No mapping found
Press ENTER or type command to continue

So far, I don't know how to combine this with :Verbose .....

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜