【发布时间】:2014-09-10 14:22:09
【问题描述】:
使用:map 可以提供 Vim 中所有映射的列表。但是,我无法搜索列表。我很惊讶地看到它在不同类型的窗口中打开,这与通常的 Vim 帮助文件不同。有没有办法以通常的形式提供它?
【问题讨论】:
标签: vim
使用:map 可以提供 Vim 中所有映射的列表。但是,我无法搜索列表。我很惊讶地看到它在不同类型的窗口中打开,这与通常的 Vim 帮助文件不同。有没有办法以通常的形式提供它?
【问题讨论】:
标签: vim
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。
【讨论】:
:redir。 +1
不要惊讶。 :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。
【讨论】:
这是一个强大的函数,可以使用: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 来调用函数,随意更改。
【讨论】:
sort --key=1,14。
@a?为什么不能只将put 的值silent map | ... 放入新缓冲区?
对于 neovim,telescope 具有开箱即用的映射列表和搜索功能:builtin.keymaps。
【讨论】: