vim中的多种折叠方法


9

我经常使用vim的folding选项,并且通常将foldmethod设置为语法。最近,我发现可以添加自定义折叠,这样我就可以将整个块放入其中/*{{{*//*}}}*/这对于将源文件的大部分合并在一起非常有用。但是,要使用该功能,我需要将foldmethod设置为marker,然后松开语法折叠。

在vim中是否可以同时具有两个活动的折叠方法? set foldmethod=syntax,marker不起作用。

Answers:


4

不,严格来说,在Vim中不能同时激活多个折叠方法。

如果您愿意学习如何编写语法突出显示规则并破解要为其添加标记折叠仿真语言的突出显示文件,则可以模拟基于标记的折叠。这样做有两个缺点:

  1. 当折叠方法设置为“语法”时,用于创建和删除折叠的命令(“ zf”,“ zd”等)将与标记和手动折叠方法一起使用。

  2. 模拟“强制”折叠级别(例如“ {{{1/” }}}1)而不是将折叠级别增加/减少一(例如{{{“ / }}}”)的标记是有问题的;您要么完全忽略折叠级别数字,要么冒着干扰(甚至可能破坏)其余基于语法的折叠规则的机会。

我建议当您发现需要基于标记的折叠时,请完全使用该方法。这可能会花费一些额外的时间和精力,但是如果您确实需要灵活性,那是值得的,特别是考虑将两者结合起来的困难。


2

我在找同样的东西。因为我不想破解语法文件,所以我有一个在折叠方法之间切换的映射。现在,我只在语法和标记之间切换:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.