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',然后在调用时将其本地化为您正在查看的单个块。