如何在Vim映射列表中搜索?

时间:2014-07-19 15:42:18

标签: vim

使用:map提供Vim中所有映射的列表。但是,我无法搜索列表。我很惊讶地看到它在不同类型的窗口中打开,这与通常的Vim帮助文件不同。有没有办法以通常的形式提供它?

3 个答案:

答案 0 :(得分:8)

Vim使用其内部寻呼机显示:map的输出,其功能非常有限(有关详细信息,请参阅:h pager)。

如果要在普通的vim缓冲区中访问:map的输出,可以使用:redir

:redir @a>    " redirect output to register a
:map
:redir END
:put a        " paste the output of :map in the current buffer

请注意,您可以重定向到文件,变量等...有关详细信息,请参阅:h redir

答案 1 :(得分:5)

不要感到惊讶。 :map:help 完全没有关联,因此没有理由期望它像:help一样工作。

您可以给:map一个参数来缩小列表范围:

:map ,

使用wildmenu和/或wildmode的正确值,您可以选项卡完成:map

:map ,<Tab>

您还可以使用<C-d>列出当前映射:

:map <C-d>

您还可以使用:map的模式特定变体来获得更易于管理的列表:

:imap ,
:nmap ,
:xmap ,
and so on…

但请记住,:map仅列出自定义映射(由您或您的插件制作)。如果您需要默认映射列表,请查看:help index

答案 2 :(得分:4)

这是一个强大的功能,可以使用: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

最后一行映射两个键 \ m 以调用该函数,根据需要进行更改。