【问题标题】:How to search in the Vim mapping listing?如何在 Vim 映射列表中搜索?
【发布时间】:2014-09-10 14:22:09
【问题描述】:

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

【问题讨论】:

    标签: vim


    【解决方案1】:

    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的指针。但我认为,我应该接受上一个答案,因为它实际上是针对实际问题的答案。
    • 我也在考虑:redir。 +1
    【解决方案2】:

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

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

    :map ,
    

    使用wildmenu 和/或wildmode 的正确值,您可以使用制表符完成:map

    :map ,<Tab>
    

    您也可以使用&lt;C-d&gt; 列出当前映射:

    :map <C-d>
    

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

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

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

    【讨论】:

      【解决方案3】:

      这是一个强大的函数,可以使用: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 来调用函数,随意更改。

      【讨论】:

      • 但是排序不太好......它们都混乱了;也许是因为 OS X 的差异?我改成了sort --key=1,14
      • 是否需要分配给@a?为什么不能只将put 的值silent map | ... 放入新缓冲区?
      • 谢谢!我收到“自上次更改以来没有写入(添加!以覆盖)”警告。有没有办法通过打开只读缓冲区或其他方式来避免这种情况?
      【解决方案4】:

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

      【讨论】:

      • 我想这个答案可以通过为那些不知道望远镜是什么的人提供更多背景来改进。我从来没有使用过它,但现在我有了一个起点。对于其他人:我通过打包程序安装了望远镜(在您共享的链接中描述)然后运行:望远镜,键入键盘映射,按 Enter,然后通过键入一些我期望找到的内容来找到我感兴趣的键盘映射.如果有帮助,这里是其他人的示例:asciinema.org/a/g9YF0I3tw5nyn4U0l2NIiqRTR 显然,我不明白如何搜索,但文档可以帮助我完成剩下的工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2011-08-14
      • 1970-01-01
      • 2019-11-18
      • 2013-12-17
      • 1970-01-01
      • 2012-07-04
      相关资源
      最近更新 更多