如何在vim中设置foldlevelstart以便最初不折叠,仍允许zr立即工作?


8

在vim中,我通常设置foldmethodindent大多数类型的文件。一般来说,我喜欢打开所有折叠打开的文件。但是,立即开始使用zm以开始在文件中全局关闭折叠是有用的,一次一个级别,允许我查看文件的整体结构,而不会妨碍细节。

我发现的唯一通用解决方案是设置foldlevelstart一个非常高的数字,例如99,以确保所有文件(记住不同的文件将具有不同级别的最大缩进)开始完全展开。但是,我必须zm反复使用以减少foldlevel文件的最大折叠级别,通常远小于99,这很麻烦且不切实际。我可以foldlevel使用vim命令行手动设置,但我仍然需要知道文件中的最大缩进。

是否有一种实用的方法来打开一个文件,其foldlevel设置只比文件本身的最大当前缩进/折叠级别高一个?

例如,给定以下文件:

a
  b
    c
      d1
      d2
    e
      f1
      f2

第一个按键zm会显示:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(但请注意,它应该适用于文件的初始最大缩进可以是任何值的一般情况)。


1
你混淆zr使用zm; 后者降低了折叠水平。
Ingo Karkat 2013年

@IngoKarkat,你是对的,我是。对不起,混乱 - 我总觉得那些关键组合反直觉。我已经解决了我的问题。
Andrew Ferrier 2013年

“我总觉得那些关键组合反直觉。” 它应该意味着zm=折叠更多(减去zr折叠
级别

Answers:


9

这会在当前文件中找到最高的foldlevel:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

要自动设置,您可以使用:autocmd

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

1
Ingo,perfect,这正是我想要的。谢谢。羞耻foldlevelstart没有这样的选择。
Andrew Ferrier 2013年

这似乎不适用于Cygwin Vim。当我使用这些设置启动文件时,我foldlevel为0并且foldlevelstart为-1。
CMCDragonkai 2016年

0

而不是使用zr,使用zR,这将打开所有折叠。同样,zM将关闭所有折叠。


加里,谢谢。这很接近,但没有做我所描述的。我想要一个命令,只能将折叠级别降低一个,但是从相关文件的最大折叠级别开始。要做到这一点,我需要使用zM将foldlevel减少到0,然后重复zr以打开更多细节。我正在寻找一个命令/组合键。
Andrew Ferrier

2
你可以这样做zR(将foldlevel设置为最高级别)然后zm就可以了。这只是一个额外的步骤。
wisbucky 2014年

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.