在我的.vimrc
文件中,我已经添加了set foldmethod=syntax
以启用方法等的折叠。然而,我不喜欢默认情况下每次打开文件时整个文件都被折叠起来的方式。是否有一种方法可以启用foldmethod
,但在打开文件时将其展开?
set foldlevel=99
无论使用何种方法进行折叠,都应该打开所有的折叠。使用 foldlevel=0
会将所有内容折叠,foldlevel=1
只会折叠部分内容,… 数值越高,折叠的内容就越少。
zm
并不能关闭所有的折叠,除非你连续按 99 次。 - bitboxerset nofoldenable
命令,这样当你打开文件时就会暂时禁用折叠功能,但只要按下zc
键,所有的折叠都会立即恢复。 - 79E09796:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))
(取自superuser上的一个答案)。 - Matthew StrawbridgezM
命令关闭所有折叠,但这可能会导致一个问题:按下 zm
命令并不能关闭所有的折叠。 - wisbucky.vimrc
文件中:
au BufRead * normal zR
它声明了一个自动命令(au
),当缓冲区被读取时触发(BufRead
),匹配所有文件(*
)并在正常模式下执行zR
(打开所有折叠)命令。BufWinEnter
来代替。 - KelvinzR
的相反数是什么? - pukif has("autocmd") ... endif
- DrBecoset nofoldenable
.vimrc
文件中,可以在打开文件时暂时禁用折叠功能,但可以使用zc
恢复折叠:
将以下代码添加到您的.vimrc
文件中,可在打开文件时暂时禁用折叠功能,但可使用zc
命令还原折叠:
在 .vimrc
中添加一个自动命令 BufWinEnter
,以使所有折叠都自动打开,像这样:
autocmd BufWinEnter * silent! :%foldopen!
这将告诉vim在打开BunWinEnter
事件后执行silent:%foldopen!
命令(详见:h BufWinEnter
)。由于使用了%
符号,silent %foldopen!
会在整个缓冲区上执行foldopen
命令,并因为!
递归地打开所有折叠。任何可能出现的错误消息都会被silent
命令屏蔽。(如果缓冲区实际上还没有包含任何折叠,则可能会收到类似E490: No fold found
的错误消息)
注意:您可以使用BufRead
代替BufWinEnter
,但是如果文件具有启用折叠的模型行,则该自动命令将被覆盖。我的意思是BufRead
自动命令在处理模型行之前运行,而BufWinEnter
则在其之后运行。我发现后者更有用。
autocmd
可以打开 所有文件 的所有折叠,而使用模型行仅适用于该文件并假定您可以修改该文件(它可能是只读文件)。模型行应如下所示:在文件的顶部或底部添加 # vim: set foldlevel=99
。 - RubenLaguna您可以添加
set foldlevelstart=99
如果想要打开时展开所有内容,可以使用set foldlevelstart=99
命令,正如很多答案所解释的那样。
但是,如果您只想查看它们展开的状态,可以按zi
键,它会展开所有内容。再次按下zi
键会将其折叠回去。
当你在 .vimrc 文件中加入 set nofoldenable
时,你可以打开未折叠的文件。
autocmd BufReadPost * silent! :%foldopen!
这对我来说是最好的。在缓冲区打开后,所有折叠都会打开。这将它们打开到正确的级别。
set foldenable
方法不好,因为如果我选择关闭一个折叠级别,它会再次启用折叠,并将所有内容折叠到0级,而不仅仅是在我激活的那个级别下降一级。
你可以将它映射到键上以启用它。 例如,
nmap ,f :set foldmethod=syntax<CR>
然后在正常模式下按下",f"键组合