如何在 vim 中将 foldlevelstart 设置为最初不折叠任何内容,仍然允许 zr 立即工作?

And*_*ier 8 vim vimrc code-folding

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

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

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

例如,给定以下文件:

a
  b
    c
      d1
      d2
    e
      f1
      f2
Run Code Online (Sandbox Code Playgroud)

第一次按键zm将显示:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 10

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

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
Run Code Online (Sandbox Code Playgroud)

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

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