如何查找以"控制键"?开头的所有vim映射?

时间:2016-02-23 14:44:15

标签: vim

在vim中:

  • :map列出所有关键映射
  • :map {lhs}列出以{lhs}开头的键序列的所有键映射。

如何搜索"所有以控制键开头的键映射" ?

(我知道我仍然可以列出所有映射,将输出重定向到文件和grep;但效率不高)。

谢谢!

2 个答案:

答案 0 :(得分:4)

不,没有直接的,内置的方法。

你能做的是:

:redir @a    redirect output of next command to register a
:map         list mappings
:redir END   end redirection
:vnew        edit new buffer in vertical window
:put a       put content of register a
:v/<C-/d     delete all lines not matching '<C-'

你可以轻松转变成一个功能。

答案 1 :(得分:1)

如果您想要一个可排序的,可搜索的:maps输出列表,可在其中搜索<C-,您可以执行以下操作:

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

这是一个强大的功能,可以使用:maps的排序输出创建垂直分割。我把它放在vimrc

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

注意:这将不包括vim的默认命令,如 Ctrl-a 来增加数字,因为它们不是map。有关这些内容,请参阅:help index