【发布时间】:2012-01-09 02:38:37
【问题描述】:
在我的.vimrc 中,我将set foldmethod=syntax 用于启用方法折叠等。但是,我不喜欢每次打开文件时都折叠整个文件的默认设置。有没有办法启用foldmethod,但打开文件时会展开它们?
【问题讨论】:
-
我发现这个article 有助于选择正确的答案。
标签: vim file-io default unfold
在我的.vimrc 中,我将set foldmethod=syntax 用于启用方法折叠等。但是,我不喜欢每次打开文件时都折叠整个文件的默认设置。有没有办法启用foldmethod,但打开文件时会展开它们?
【问题讨论】:
标签: vim file-io default unfold
您可以将其放入您的.vimrc:
au BufRead * normal zR
它声明一个自动命令(au),在读取缓冲区时触发(BufRead),匹配所有文件(*)并在正常模式下执行zR(打开所有折叠)命令。
【讨论】:
BufWinEnter。
zR相反的是什么
zM
if has("autocmd") ... endif
set foldlevel=99
应该打开所有折叠,无论使用何种折叠方法。 foldlevel=0 全部折叠,foldlevel=1 只有一些,...更多的数字将关闭更少的折叠。
【讨论】:
zm不会关闭所有折叠,除非你输入99次
set nofoldenable,它会在你打开文件时暂时禁用折叠,但只要你点击zc,所有折叠都会恢复
:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))(取自an answer on superuser)。
zM关闭所有折叠。
set nofoldenable
将此添加到您的.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 autocmds 在处理模式行之前运行,BufWinEnter 将在之后运行它们。我发现后者更有用
【讨论】:
autocmd here 允许使用模式行打开 所有文件 的所有折叠,它只是应用于该文件并假设您可以修改该文件(它可能是只读文件)。模式行在文件的顶部或底部看起来像 # vim: set foldlevel=99
你可以添加
set foldlevelstart=99
到您的 .vimrc 文件,它将开始编辑所有折叠打开的任何新文件。
【讨论】:
如果您想要一种方法让它在打开后立即展开,您可以使用set foldlevelstart=99,正如很多答案所解释的那样。
但是,如果您只想看到它们展开,您只需按zi,它就会展开所有内容。另一个 zi 将关闭它们。
【讨论】:
您可以将其映射到键以启用它。 例如,
nmap ,f :set foldmethod=syntax<CR>
然后在普通模式下按“,f”组合键
【讨论】:
将set nofoldenable 放入 .vimrc 文件即可打开展开的文件。
【讨论】: