在vim中的折叠功能

81

是否有任何方法或工具可以在Vim中折叠函数,就像Visual Studio或Eclipse一样?


1
如果你的意思是“自动折叠类和函数”,那么你应该在问题中明确说明。 - P Shved
2
用户可以选择折叠哪个部分:请仅返回翻译文本。 - Yongwei Xing
vim有相当不错的文档。尝试输入 :help fold。 - William Pursell
请参考:help fold-method。 - Big McLargeHuge
1
根据语言的不同,存在着一些插件,它们提供的结果比 &fold == syntaxindent 原生提供的更好。 - Luc Hermitte
请注意,有几种语言具有vim的语法文件,但尚不支持“:set foldmethod=syntax”。 - Garo
5个回答

152
Vim folding commands
---------------------------------
zf#j creates a fold from the cursor down # lines.
zf/ string creates a fold from the cursor to string .
zj moves the cursor to the next fold.
zk moves the cursor to the previous fold.
za toggle a fold at the cursor.
zo opens a fold at the cursor.
zO opens all folds at the cursor.
zc closes a fold under cursor. 
zm increases the foldlevel by one.
zM closes all open folds.
zr decreases the foldlevel by one.
zR decreases the foldlevel to zero -- all folds will be open.
zd deletes the fold at the cursor.
zE deletes all folds.
[z move to start of open fold.
]z move to end of open fold.

来源:Vim文档

3
在光标下方关闭折叠。(警告:这是通过试验得出的结论。) - Srikanth
4
za可以切换折叠(如果当前关闭则打开,反之亦然)。我发现这非常方便;我几乎从不使用zc或zo。http://vim.wikia.com/wiki/Folding#Opening_and_closing_folds - Aman
2
zfgg 折叠从顶部到光标的所有行。 zfG 折叠从光标到底部的所有行。 - Christopher Markieta
4
你也可以在Visual Line Mode(Shift+v)中选择多行代码并使用zf折叠它们。 - Christopher Markieta
1
我使用zf%有效地折叠了一个C函数(我没有语法插件可以自动完成它) - Paul Stelian
实际上,与许多其他命令一样,“zf”以“光标移动”结束。例如:zfH从光标行折叠到屏幕顶部。因此,在打开的“{”中停放光标并键入“zf%”会折叠整个块(在打开的括号或制表符中,“%”跳转到关闭的括号)。 - Juan Lanus

83

是的,VIM有出色的折叠功能。我不喜欢学习太多控制方式,更喜欢自动化,所以这里是我个人使用的方法:

在我的.vimrc文件中:

set foldmethod=indent
set foldlevel=1
set foldclose=all

这个功能会根据缩进自动折叠您打开的文件,对于所有缩进超过1级的内容。foldclose选项可以使折叠在我导航离开折叠后自动重新关闭。

文件内控制:

zo - opens folds
zc - closes fold
zm - increases auto fold depth
zr - reduces auto fold depth

如果你对折痕感到厌烦,可以使用

: set foldmethod=syntax

或按:

zR

让它们全部消失。


4
我发现以下设置很实用:set nofoldenable set foldlevel=99这样可以禁用文件打开时的自动折叠,并且仅折叠外部函数(不会进入并折叠“for”、“if”等语句)。 尽管我的配置是基于你的回答,谢谢。 - merinoff
2
@merinoff 尽管这可能永远不会有影响,但根据文档(针对版本8.1),foldlevel 大于20的设置没有影响,因为那是内部上限。 - Jamie S
1
尝试了很多插件来处理各种文件类型,这是我找到的最好的。干净、简单,没有插件。非常感谢。 - Phúc Lê
当我看到这个解决方案时,你无法想象我有多么兴奋。 - Dogunbound hounds

25
:set foldmethod=syntax

如果你有自己语言的语法文件,Sublime Text 应该会自动折叠所有函数和其他代码块。


1
这应该是被接受的答案。你改变了我的生活。 - mohitmun

6

Vim拥有出色的折叠支持。在vim帮助系统中有很好的文档。只需打开vim并执行以下操作:

:help usr_28.txt 

读完这篇文章,你还可以阅读以下内容

:help folding

需要更多信息请参考。


2

是的,它绑定在“z”键上,例如zO打开所有折叠。请参阅Vim中的“:help fold”获取更多信息。您可以根据非常简单的规则(如缩进)或根据代码语法进行折叠。


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