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

Posted

技术标签:

【中文标题】如何在 Vim 中启用自动折叠?【英文标题】:How do I enable automatic folds in Vim? 【发布时间】:2011-06-14 22:43:13 【问题描述】:

set foldmethod=syntax 似乎什么也没做。

【问题讨论】:

【参考方案1】:

要允许基于语法的折叠,请将以下内容添加到您的 .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 的人在编辑文档时也不会维护它们。手动折叠效果很好,直到有人在源代码管理中编辑您的代码并且您的所有折叠现在都在错误的位置。

更多阅读

    请参阅:help fold-methods 了解不同折叠方法的详细信息。 请参阅 :help folding 了解用于操作折叠的键盘命令。 请参阅 :help folds 以获取有关折叠的整个主题的帮助。

【讨论】:

您真的在问题发布后的一分钟内输入了所有这些信息吗?为清晰度、细节和速度+1! 感谢分享您的经验!你不知道如何启用 C++ 折叠吗? 供参考:测试C/C++不需要额外的let ...=1命令,只需要set foldmethod=syntax就够了。即某些语言不需要let 命令。 永久 JSON 折叠的 let 设置是什么?我在任何地方都找不到它。【参考方案2】:

JavaScript 折叠也不适合我。我发现当我执行 set syntax=javaScript(大写的 S)时,它突然起作用了。

【讨论】:

呵呵,我这样做了,突然间颜色就消失了,猜猜它不适合所有人。 :) vim version 8. 起初我尝试过,但它没有折叠任何东西,并带走了语法高亮。然后我设置了 syntax=javascript,突然我的所有函数都折叠起来了。很奇怪。【参考方案3】:

在这里尝试了所有解决方案,但没有一个适用于 NeoVim v0.3.1 直到我找到vim-javascript 插件并且折叠开始工作。

【讨论】:

这个;此外,我必须为 Neovim 执行 set syntax=javaScript 才能真正检测到 JavaScript,然后立即激活折叠(因为我的 init.vim 文件中已经有 set foldmethod=syntax,我想)。现在将其放入init.vim 文件中,但仅限于检测到 JS 文件的情况。【参考方案4】:

在新版本的 Vim 中启用折叠的方式已经改变(我使用的是 vim 7.4)。现在您应该创建文件~/.vim/ftplugin/javascript.vim(在 linux 上)并添加代码折叠说明,如 Eric Johnson 的回答中所述。必须通过将其放入您的 .vimrc 来启用特定文件类型的文件类型检测和加载插件:

filetype plugin on

【讨论】:

以上是关于如何在 Vim 中启用自动折叠?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vim-latex 在 vi​​m 中禁用代码折叠?

为 Python 代码使用 Vim 折叠的推荐方法是啥

vim中的折叠功能

eclipse中js代码如何设置可折叠?

有没有办法在 Eclipse 中手动折叠代码?

关于 vim 折叠的困惑 - 如何禁用?