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

Vim 如何在打开文件时将默认值设置为“展开”?,vim,file-io,default,unfold,Vim,File Io,Default,Unfold,在我的.vimrc中,我设置了set foldmethod=syntax来启用方法的折叠等功能。但是,我不喜欢每次打开文件时都会折叠整个文件的默认设置。是否有一种方法可以启用foldmethod,但在我打开文件时文件仍处于展开状态?您可以将其映射到键以启用它。 比如说, nmap ,f :set foldmethod=syntax<CR> nmap,f:set foldmethod=syntax 然后,在正常模式下,按“f”组合键 set foldlevel=99 应打开所有折

在我的
.vimrc
中,我设置了
set foldmethod=syntax
来启用方法的折叠等功能。但是,我不喜欢每次打开文件时都会折叠整个文件的默认设置。是否有一种方法可以启用
foldmethod
,但在我打开文件时文件仍处于展开状态?

您可以将其映射到键以启用它。 比如说,

nmap ,f :set foldmethod=syntax<CR>
nmap,f:set foldmethod=syntax
然后,在正常模式下,按“f”组合键

set foldlevel=99

应打开所有折叠,无论折叠方法如何。当
foldlevel=0
全部折叠时,
foldlevel=1
仅部分折叠。。。数字越大,折叠次数越少。

您可以将其放在
中。vimrc
au-BufRead*正常zR


它声明一个自动命令(
au
),在读取缓冲区(
BufRead
)时触发,匹配所有文件(
*
),并在正常模式下执行
zR
(打开所有折叠)命令。
中的vimrc
bufwinter
添加一个autocmd以自动打开所有折叠,如下所示:

autocmd BufWinEnter * silent! :%foldopen!
告诉vim执行
静默:%foldopen打开后
BunWinEnter
事件(请参阅)。
silent%foldopen%
的原因,code>将在整个缓冲区上执行,并且由于
的原因,将递归地打开所有折叠。任何最终的错误消息都将被抑制。(如果缓冲区实际上还没有包含任何折叠,您可能会收到错误消息,如
E490:No fold found

注意:您可以使用
BufRead
而不是
bufwinter
,但是如果文件具有启用折叠的模型线,则该折叠将覆盖此autocmd。我的意思是,
BufRead
autocmds在处理modeline之前运行,
bufwinter
将在处理modeline之后运行它们。我发现后者更有用

您可以添加

set foldlevelstart=99

它将在打开所有折叠的情况下开始编辑任何新文件。

如果您想让它在打开后立即展开显示,您可以使用
set foldlevelstart=99
,正如许多答案所解释的那样

但是,如果您只想看到它们展开,只需按
zi
,它就会展开所有内容。另一个,
zi
将关闭它们

set nofoldenable

将其添加到您的
.vimrc
将在您打开文件时暂时禁用折叠,但仍可以使用
zc
恢复折叠。当您将
设置为nofoldenable
放入.vimrc文件时,您可以打开展开的文件。

出于某种原因,这只是部分展开了文件。我不得不用
bufwinter
来代替。出于好奇,与
zR
nvm相反的是
zM
可以更好地关闭所有的文件夹:
如果有(“autocmd”)。。。endif
但这将导致一个问题:按
zm
不会关闭所有折叠,除非您输入它99次。您还可以
设置nofoldenable
,当您打开文件时,它会暂时禁用折叠,但是,只要您点击
zc
设置您可以使用的确切折叠级别,所有折叠都会立即恢复。
:autocmd bufwenter*let&foldlevel=max(map(范围(1,行(“$”),“foldlevel(v:val)”)
(取自)。@bitboxer“但这会导致一个问题:按zm不会关闭所有折叠”使用
zM
关闭所有折叠。@79E09796您应该将注释移动到自己的答案。为什么不使用一个模型线,为每个文件设置不同的折叠选项?如何使用模型线来实现这一点?使用
autocmd
此处允许使用模型线打开所有文件的所有折叠,它仅适用于该文件,并假设您可以修改该文件(它可以是只读文件)。modeline在文件的顶部或底部看起来像
#vim:set foldlevel=99
,这很有用-但是当您zc一个折叠时,它会同时隐藏所有其他折叠。我想我个人喜欢默认为foldlevel=99,因为它会保留'zc',然后在调用时将其本地化为您正在查看的单个块。