有什么方法可以在Vim中查看当前映射的键吗?

基本上,我想查看当前缓冲区中所有插件,vimrc等所做的所有键映射,在当前缓冲区。还有别的办法吗?

104756 次浏览

很简单,只运行不带参数的:map变量。

:map
:imap
:vmap

你可以用:map命令来实现。还有其他变体。

  • :nmap用于普通模式映射
  • :vmap用于可视模式映射
  • :imap用于插入模式映射

上面的列表并不完整。在Vim中输入:help map将提供更多信息。

除了关于不带参数的:map的答案:不要错过它的详细形式(:verbose map),它显示了映射的定义位置(参见:help map-verbose)。

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

这将把定义快捷方式的位置输出到一个文本文件。

:map和它的朋友是键,:verbose添加信息,而:redir允许搜索后细化。

它们是一个完美的组合,可以显示什么命令绑定到什么快捷方式,反之亦然,但如果你想在需要搜索映射时搜索一些键并避免临时文件,请查看scriptease:Verbose命令。

它是:verbose的包装器,用于在预览窗口中显示结果。

这样你就可以在结果中搜索你想要的任何东西,而不需要使用临时文件

输入:Verbose map并像往常一样使用/ ?

另一种方法是将会话保存到一个文件中,然后编辑这个文件,因为它包含所有的映射和设置。

:mks[ession] [file] -写一个Vim脚本,恢复当前编辑 会话。< / p >

  1. 安装这个插头: Plug 'https://github.com/tpope/vim-scriptease' < / p >

  2. 怎样知道<M-C-F10>(我自己的映射)做什么? 试试这个< / p >
: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>

把它放在一个函数中:

            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'



旧内容,可能无用:

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>)

现在:Map d得到:

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

到目前为止,我不知道如何将其与:Verbose .....结合起来