如何在Vim中启用自动折叠?

82

我该如何在Vim中启用自动折叠?set foldmethod=syntax似乎没有什么作用。

4个回答

147

如果要按照语法折叠,请在您的.vimrc文件中添加以下内容:

set foldmethod=syntax
set foldlevelstart=1

let javaScript_fold=1         " JavaScript
let perl_fold=1               " Perl
let php_folding=1             " PHP
let r_syntax_folding=1        " R
let ruby_fold=1               " Ruby
let sh_fold_enabled=1         " sh
let vimsyn_folding='af'       " Vim script
let xml_syntax_folding=1      " XML

基于语法的折叠是在语言的语法文件中定义的,这些文件位于$VIM/syntax/usr/share/vim/vimXX/syntax/。但是有些语言没有将折叠规则嵌入到它们的语法文件中,例如Python。对于这些语言,您需要从http://vim.sf.net下载一些可进行折叠操作的东西。否则,您将需要使用基于缩进的折叠。为了有效地执行此操作,您可能需要将以下内容添加到您的.vimrc文件中:

set foldmethod=indent
set foldnestmax=2

其他类型的折叠

有6种类型的折叠:

manual          manually define folds
indent          more indent means a higher fold level
expr            specify an expression to define folds
syntax          folds defined by syntax highlighting
diff            folds for unchanged text
marker          folds defined by markers in the text

个人而言,我只使用语法折叠。通常,我只想折叠方法而不是每个缩进级别都折叠。工作中不一致的缩进和奇怪格式的旧代码使得缩进折叠变得困难或者不可能。在文档中添加标记很繁琐,而且不使用 Vim 的人在编辑文档时不会维护它们。手动折叠非常好用,直到有人在源代码控制中编辑您的代码,然后所有的折叠都错位了。

更多阅读

  1. 查看 :help fold-methods 以了解不同折叠方法的详细信息。
  2. 查看 :help folding 以了解操作折叠的键盘命令。
  3. 查看 :help folds 来获取关于整个折叠主题的帮助。

10
你真的是在问题发布一分钟内就打出了所有这些文字吗?赞一个,因为你表述清晰、详细并且速度很快! - Cascabel
感谢分享您的经验!您知道如何启用C++折叠吗? - Vitaly Isaev
供参考:测试表明,C/C++不需要额外的let ...=1命令,只需要set foldmethod=syntax就足够了。也就是说,有些语言不需要let命令。 - Johnny Wong
永久JSON折叠的“let”设置是什么?我无法在任何地方找到它。 - Serge Stroobandt

3

我也遇到了 JavaScript 折叠不起作用的问题。后来发现当我输入 set syntax=javaScript(注意大写字母 S),它突然就可以工作了。


1
哈哈,我做了那个之后,突然所有的颜色都消失了,看来这不适合每个人。 :) vim 8 版本。 - ArchNoob
起初我尝试了那个,但它没有折叠任何内容并且取消了语法高亮。然后我重新设置了语法=javascript,突然所有的函数都被折叠了。很奇怪。 - elig

2
我尝试了这里的所有解决方案,但在 NeoVim v0.3.1 中均不起作用。直到我找到了vim-javascript插件,折叠功能才开始正常运作。

此外,我不得不为 Neovim 设置 set syntax=javaScript 才能使其真正检测到 JavaScript,然后折叠立即被激活(因为我已经在我的 init.vim 文件中设置了 set foldmethod=syntax,我想)。现在开始将此放入 init.vim 文件,但仅在检测到 JS 文件的情况下。 - Alexandre

1
新版本的Vim启用折叠的方式已经改变(我正在使用vim 7.4)。现在,您应该在Linux上创建文件~/.vim/ftplugin/javascript.vim,并按照Eric Johnson的答案中所述添加代码折叠说明。必须通过将以下内容放入您的.vimrc中来启用特定文件类型的文件类型检测和加载插件:
filetype plugin on

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接