【问题标题】:In vim, how can I map a key to toggle folding over the whole buffer?在 vim 中,我如何映射一个键来切换整个缓冲区的折叠?
【发布时间】:2023-03-15 18:20:01
【问题描述】:

我想映射一个键以在foldmethod=indent 和不折叠之间切换。我该怎么做?

【问题讨论】:

    标签: vim keyboard-shortcuts keymapping


    【解决方案1】:

    我会说 zi (切换可折叠)可以完成这项工作。 无需映射。 (另见:he folding

    (你也可以看看 zMzR)


    由于您想将其映射到单个键,请按以下步骤操作:

    :nnoremap <F10> zi
    

    要每次强制折叠模式为indent(我不推荐),你需要一个函数: 将函数添加到您的 vimrc[2]:

    function ForceFoldmethodIndent()
        if &foldenable
            se foldmethod=indent
        endif
    endfunction
    
    nnoremap <F10> :normal zi^M|call ForceFoldmethodIndent()^M
    inoremap <F10> ^O:normal zi^M|call ForceFoldmethodIndent()^M
    

    让我知道这是否适合您。如果您接受此答案,我将不胜感激:)

    干杯

    [1] 与behave mswin [2] 要在命令行或插入模式中输入特殊键(例如 ^O),请使用例如

    • Ctrl-VCtrl-O
    • 在 windows[1] Ctrl-QCtrl-O

    【讨论】:

    • 已经很接近了,但是我只想按一个键!
    • 我试过map &lt;F10&gt; :set foldmethod=indent&lt;CR&gt;zi,但不幸的是,第一次按下时它不起作用。
    • 也许将&lt;F10&gt; 映射到zi?还期望一个键中有太多功能不是 vi 精神。否则,该概念在第一次插入时失败,从额外的 i 开始 :)
    • 好吧,由于缺少上下文,而且您仍然看到有问题:您可能错过了在命令模式下执行normal zi 的“正常”命令。我用大量的分步和背景信息更新了答案。 HTH
    • 感谢您的详细解答。很抱歉,但它仍然不起作用;事实上,它比我的简单映射更糟糕!我不想在我的 vimrc 中设置 fold 方法,因为我不希望默认情况下折叠东西,只在需要时折叠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多