我怎样才能在 vim 中设置 foldlevelstart 以便最初不折叠任何内容,同时仍允许 zr 立即工作?

我怎样才能在 vim 中设置 foldlevelstart 以便最初不折叠任何内容,同时仍允许 zr 立即工作?

在 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

查找当前文件中最高的折叠级别:

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

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

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

答案2

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

答案3

该选项set nofoldenable可让您从打开所有折叠开始阅读文件

相关内容