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

88

在我的.vimrc文件中,我已经添加了set foldmethod=syntax以启用方法等的折叠。然而,我不喜欢默认情况下每次打开文件时整个文件都被折叠起来的方式。是否有一种方法可以启用foldmethod,但在打开文件时将其展开?


我发现这篇文章有助于选择正确的答案。 - M Imam Pratama
9个回答

78
set foldlevel=99

无论使用何种方法进行折叠,都应该打开所有的折叠。使用 foldlevel=0 会将所有内容折叠,foldlevel=1 只会折叠部分内容,… 数值越高,折叠的内容就越少。


9
但这会带来一个问题:按下 zm 并不能关闭所有的折叠,除非你连续按 99 次。 - bitboxer
24
你也可以使用set nofoldenable命令,这样当你打开文件时就会暂时禁用折叠功能,但只要按下zc键,所有的折叠都会立即恢复。 - 79E09796
1
要设置精确的折叠级别,您可以使用以下命令::autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))(取自superuser上的一个答案)。 - Matthew Strawbridge
9
使用 zM 命令关闭所有折叠,但这可能会导致一个问题:按下 zm 命令并不能关闭所有的折叠。 - wisbucky
2
@79E09796 你应该把你的评论移到一个独立的答案中。 - Josh
显示剩余2条评论

71
你可以将以下代码放入你的.vimrc文件中: au BufRead * normal zR 它声明了一个自动命令(au),当缓冲区被读取时触发(BufRead),匹配所有文件(*)并在正常模式下执行zR(打开所有折叠)命令。

16
由于某些原因,这个文件只部分展开了。我不得不使用 BufWinEnter 来代替。 - Kelvin
只是出于好奇,zR 的相反数是什么? - puk
4
没事了,关闭所有折叠是“zM”。 - puk
更好的方式:if has("autocmd") ... endif - DrBeco

30
set nofoldenable

将以下内容添加到您的.vimrc文件中,可以在打开文件时暂时禁用折叠功能,但可以使用zc恢复折叠:

将以下代码添加到您的.vimrc文件中,可在打开文件时暂时禁用折叠功能,但可使用zc命令还原折叠:


3
有用 - 但是当你使用“zc”折叠时,它会隐藏所有其他折叠,一次性全部隐藏。我认为我个人喜欢将默认值设置为foldlevel=99,因为这样可以在调用时将“zc”局限于你正在查看的单个块。 - wom

13

.vimrc 中添加一个自动命令 BufWinEnter,以使所有折叠都自动打开,像这样:

autocmd BufWinEnter * silent! :%foldopen!

这将告诉vim在打开BunWinEnter事件后执行silent:%foldopen!命令(详见:h BufWinEnter)。由于使用了%符号,silent %foldopen!会在整个缓冲区上执行foldopen命令,并因为!递归地打开所有折叠。任何可能出现的错误消息都会被silent命令屏蔽。(如果缓冲区实际上还没有包含任何折叠,则可能会收到类似E490: No fold found的错误消息)

注意:您可以使用BufRead代替BufWinEnter,但是如果文件具有启用折叠的模型行,则该自动命令将被覆盖。我的意思是BufRead自动命令在处理模型行之前运行,而BufWinEnter则在其之后运行。我发现后者更有用。


为什么不使用一个模型行,针对每个文件设置不同的折叠选项呢? - MarkHu
在这里使用 autocmd 可以打开 所有文件 的所有折叠,而使用模型行仅适用于该文件并假定您可以修改该文件(它可能是只读文件)。模型行应如下所示:在文件的顶部或底部添加 # vim: set foldlevel=99 - RubenLaguna
在Lua中如何实现这个? - 71GA

8

您可以添加

set foldlevelstart=99

将以下代码添加到您的.vimrc文件中,它将以展开所有折叠的方式开始编辑任何新文件。

4

如果想要打开时展开所有内容,可以使用set foldlevelstart=99命令,正如很多答案所解释的那样。

但是,如果您只想查看它们展开的状态,可以按zi键,它会展开所有内容。再次按下zi键会将其折叠回去。


0

当你在 .vimrc 文件中加入 set nofoldenable 时,你可以打开未折叠的文件。


0

autocmd BufReadPost * silent! :%foldopen!

这对我来说是最好的。在缓冲区打开后,所有折叠都会打开。这将它们打开到正确的级别。

set foldenable 方法不好,因为如果我选择关闭一个折叠级别,它会再次启用折叠,并将所有内容折叠到0级,而不仅仅是在我激活的那个级别下降一级。


0

你可以将它映射到键上以启用它。 例如,

nmap ,f :set foldmethod=syntax<CR>

然后在正常模式下按下",f"键组合


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接