【发布时间】:2012-08-11 23:35:41
【问题描述】:
当我在 Vim 中查看带有详细 cmets 的长代码文件时,我希望能够加载 cmets 折叠但其他所有内容都展开的文件。我在.vimrc 中的当前折叠配置是:
set foldmethod=syntax
set nofoldenable
这样,当我想开始折叠时,我可以开始执行z 命令。但是有没有办法只折叠(块)cmets?
【问题讨论】:
当我在 Vim 中查看带有详细 cmets 的长代码文件时,我希望能够加载 cmets 折叠但其他所有内容都展开的文件。我在.vimrc 中的当前折叠配置是:
set foldmethod=syntax
set nofoldenable
这样,当我想开始折叠时,我可以开始执行z 命令。但是有没有办法只折叠(块)cmets?
【问题讨论】:
您可以执行一个全局命令来关闭所有块注释折叠:
:g/^\/\*/foldc
这将在任何以/*(常见的块注释指示符)开头的行上执行:help foldclose。注意 / 和 * 在这种情况下需要转义。如果您使用不同的分隔符(例如 :g#^/\*#foldc),则无需转义 /。如果您希望这自动发生,您可以将其添加到自动命令中。例如:
set fdm=syntax fen
augroup closeCommentFolds
au!
au FileType javascript %foldo | g/^\/\*/foldc
au FileType ruby %foldo | g/^=begin/foldc
augroup end
请注意,在这些示例中,正则表达式中的^ 字符指定/* 和=begin 匹配位于行首。如果要匹配行首和匹配之间是否有空格,请使用^\s* 而不是^。 %foldo 将打开所有折叠,以便设置 foldenable,但它不会折叠所有内容(在这种情况下只是 cmets)。
【讨论】:
...set fen | %foldopen | %g^/\*@call SilentFold(),其中SilentFold 是我定义的一个函数,用于抑制使用/*...*/ 样式的行的折叠错误,即使它不是块注释(是的,我反对,但我没有写代码)并使用normal zc。此外,如果您发现我所做的改进了帖子,请随时从中汲取灵感。 (它太冗长了,我也很想知道为什么。)+1 谢谢!
{...} 块。