【问题标题】:Display a ordered VIM keyboard mapping显示有序的 VIM 键盘映射
【发布时间】:2012-12-09 00:48:21
【问题描述】:

有没有办法显示我当前 vim 环境的所有键盘映射的有序列表,如下所示:

a: append
b: back one word
c: ...
.
.
.

---- Ctrl mappings ----
<C-a> (I dont know...)
.
.
.
<C-p> Default mode for CrtlP
...

---- Alt mappings ----
...

这对我很有用。

【问题讨论】:

标签: vim


【解决方案1】:

:map:verbose map 向您显示会话中定义的映射列表,但它们的顺序不是这样。 AFAIK,Vim 没有提供这么好的格式:恐怕你必须为此编写一个自定义函数。

编辑

另外,请注意ab 和朋友不是“映射”,因为 CtrlP 的 &lt;C-p&gt; 是一个映射。 :map 根本不会显示它们。

因此,您的想法虽然很有趣,但可能不是单行就能完成的。您可以从:h index 中提取信息,添加:map 的结果并尝试按照对您有意义的顺序排列所有这些,但这似乎不是一件容易的事。这听起来非常适合 python/ruby/php 脚本,不是吗?

结束

【讨论】:

  • 我认为存在类似的东西,我的想法是用它来帮助 VIM 新手。稍后我会尝试编写一个脚本来执行此操作。
【解决方案2】:

如果您想要一个排序的、可搜索的当前映射列表来查找未使用的键,您可以执行以下操作:

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 来调用函数,随意更改。

注意:正如@romainl 提到的,这将不包括像 i 这样的命令来插入文本

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 感谢您的反馈。我现在已经包含了代码。
【解决方案3】:

您还可以使用FZF Plugin,它为您提供:Maps 命令,该命令显示与:verbose map 相同的信息,但在一个可模糊搜索的弹出窗口中。它与 Tom Hales 的回答基本相同,但是是 fzf 版本。我已将其映射到 &lt;leader&gt;F1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多