如何在打开文件时将默认设置为展开?

Sua*_*uan 56 vim file-io default unfold

在我的.vimrc我已经把set foldmethod=syntax启用折叠的方法等.但是,我不喜欢默认,每次我打开一个文件,整个东西都折叠.有没有办法启用foldmethod,但打开文件时展开文件?

Wal*_*ter 56

你可以把它放在你的.vimrc: au BufRead * normal zR

它声明了一个自动命令(au),当读取缓冲区()时触发BufRead,匹配所有文件(*)并zR在正常模式下执行(打开所有折叠)命令.

  • 出于某种原因,这只是部分展开了文件.我不得不使用`BufWinEnter`代替. (8认同)
  • nvm,是`zM`来关闭所有褶皱 (2认同)

Roo*_*ook 53

set foldlevel=99
Run Code Online (Sandbox Code Playgroud)

无论用于折叠的方法如何,都应打开所有折叠.随着foldlevel=0所有的折叠,foldlevel=1只有萨姆,...较高的数字关闭更少的折叠.

  • 你也可以`设置nofoldenable`,当你打开文件时暂时禁用折叠,但是一击到`zc`就会恢复所有折叠. (15认同)
  • 但这会导致一个问题:按下`zm`不会关闭所有折叠,除非你输入99次 (7认同)
  • @bitboxer _"但这会导致问题:按zm不会关闭所有折叠"_使用`zM`关闭所有折叠. (4认同)
  • @79E09796 您应该将您的评论移至其自己的答案。 (2认同)

79E*_*796 18

set nofoldenable
Run Code Online (Sandbox Code Playgroud)

.vimrc当您打开文件时,将此添加到您的遗嘱会暂时禁用折叠,但折叠仍然可以恢复zc

  • 很有用 - 但是当您折叠一个折叠时,它也会同时隐藏所有其他折叠。我想我个人喜欢默认foldlevel=99,因为它会保留“zc”,然后本地化到您在调用时正在查看的单个块。 (3认同)

sje*_*397 6

你可以加

set foldlevelstart=99
Run Code Online (Sandbox Code Playgroud)

到您的 .vimrc 文件,它将开始编辑所有折叠打开的任何新文件。


ece*_*ulm 5

.vimrc添加了自动命令BufWinEnter打开所有自动折叠是这样的:

autocmd BufWinEnter * silent! :%foldopen!
Run Code Online (Sandbox Code Playgroud)

告诉vim执行silent :%foldopen!after after BunWinEnter事件(请参阅参考资料:h BufWinEnter).由于这个问题,silent %foldopen!foldopen在整个缓冲区上执行并将以%递归方式打开所有折叠!.任何最终的错误消息都将被抑制silent.(您可能会收到错误消息,例如E490: No fold found缓冲区实际上是否包含任何折叠)

注意:您可以使用BufRead 而不是BufWinEnter然后如果文件具有启用将覆盖此autocmd的折叠的模式行.我的意思是BufReadautocmds在处理模式行之前BufWinEnter运行,并在之后运行它们.我发现后者更有用