如何在Vim中启用和使用代码折叠?


Answers:


40

不,你不必从你在你的链接到页面把命令~/.vimrc,你可以只发出后键入他们:vim得到命令提示符。

但是,如果您放行:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

如您在中提供的链接中所示~/.vimrc,您不必每次想在文件中使用折叠时都键入它们。在set nofoldenable确保了打开时,文件是“正常的”,即不折叠。


我有一个用C编写的代码,因此,课程学习者可以使用它的一个功能。我按<kbd> esc </ kbd>转到命令,所以在:之后,我写了zc,什么也没发生。
Mohammad Reza Rezwani 2014年

1
@alex您不应在之后输入的zc :set在键入时出现提示后,键入命令:。在zc您类型时,你可以自由地移动光标,就像你会使用zt来获取文本光标到当前屏幕的顶部。
Anthon

39

默认折叠

Vim的默认折叠方法manual意味着折叠是手动创建的。否则,不存在折叠被关闭或打开使用zazozc作为你说明。但是,你可以创建一个折叠通过zf{motion}普通模式或zf可视模式; 例如,zfj正常模式下,为当前行创建一个折叠,然后再创建一个折叠。

折叠 indent

@Anthon接受的答案描述了如何将折叠方法设置为indent; 即折叠是由压痕的级别定义的。

折叠 syntax

以更方便的方式,可以根据当前缓冲区的语言语法自动创建折叠。如果使用的是一种编程语言,让我们称之为大号,你有折叠定义大号(例如已安装在其中的折叠信息一个Vim插件大号定义;如c.vim为C / C ++,或蟒-mode for Python),您只需要将折叠方法设置为syntax

set foldmethod=syntax

而已。使用折叠最有用的命令是:

  • zo 在光标处打开一个折痕。
  • zShift+ o打开光标处的所有折痕。
  • zc 在光标处折叠。
  • zm增加foldlevel一个。
  • zShift+ m关闭所有打开的折痕。
  • zr减少foldlevel一。
  • zShift+将r减小foldlevel到零-所有折叠都会打开。

14

您不必系统地使用它:我通常按动议或部分手动选择折页。例如,折叠一个段落是,zfip然后折叠下一个20行是zf20j。使用za切换和zd清除。

这需要更多的工作,但可以折叠以反映手头的任务。


4

您可以folding在当前会话中启用@Anthon的答案。但是,如果要使其永久化,则必须至少设置以下行.vimrc以折叠工作:

set foldmethod=indent

indent 是一种折叠,您可以从中看到更多 :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

现在,每次使用打开文件时vim,您都可以看到代码被设置的方法折叠了。然后你可以使用zazczo


不需要使用vimrc,我从来没有这样做过,因为我只是偶尔使用折叠
Anthon 2014年

@Anthon:哦,当然。我将在答案中添加更多信息。
cuonglm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.