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

Jik*_*ose 10 vim

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

Mar*_*rth 12

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

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

:redir @a>    " redirect output to register a
:map
:redir END
:put a        " paste the output of :map in the current buffer
Run Code Online (Sandbox Code Playgroud)

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


rom*_*inl 9

不要惊讶.:map是没有关系的,在所有:help所以没有任何理由指望它像工作:help.

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

:map ,
Run Code Online (Sandbox Code Playgroud)

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

:map ,<Tab>
Run Code Online (Sandbox Code Playgroud)

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

:map <C-d>
Run Code Online (Sandbox Code Playgroud)

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

:imap ,
:nmap ,
:xmap ,
and so on…
Run Code Online (Sandbox Code Playgroud)

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


Tom*_*ale 6

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

  • 我想这个答案可以通过为那些不知道什么是望远镜的人提供更多背景信息来改进。我从未使用过它,但现在我有了一个起点。对于其他人:我通过打包机安装了望远镜(在您共享的链接中进行了描述),然后运行:Telescope,键入键盘映射,按 Enter 键,然后通过键入一些我期望找到的内容来找到我感兴趣的键盘映射。这是一个供其他苦苦挣扎的人使用的示例,如果有帮助的话:https://asciinema.org/a/g9YF0I3tw5nyn4U0l2NIiqRTR 显然,我不明白如何搜索,但文档可以帮助我完成其余的工作。 (2认同)

Tom*_*ale 5

这是一个强大的函数,可使用的排序输出创建可搜索的垂直拆分 :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
Run Code Online (Sandbox Code Playgroud)

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