Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I enable automatic folds in Vim?

How do I enable automatic folding in Vim? set foldmethod=syntax doesn't seem to do much of anything.

like image 810
Eric Johnson Avatar asked Jan 25 '11 03:01

Eric Johnson


People also ask

How do I create a fold in Vim?

Open it in Vim, and place the cursor at the beginning of a paragraph. Make sure you're in normal mode, and type zf2j . After you press j , Vim will create a fold covering three lines — the line you started the fold on, and the next two lines.

What is code folding in Vim?

Yanis. March 15, 2020. Folding is a way to hide a chunk of text, and thus unclutter the view. That comes handy when you need to focus on some other part of code, or if you want to get a quick overview of the whole file.

How do I save a fold in Vim?

The problem is that when you close Vim, your artfully folded code returns to its unfolded state. The solution is quite simple - when you are ready to save your folds run the :mkview command. This will save your folds in the current buffer to your viewdir ( :h viewdir ) depending on your environment.

How do I expand all lines in Vim?

To expand the lines, put the cursor over the fold and hit spacebar (in vim terminology, this deletes the fold). (Side note: you may want to change the look of collapsed folds.


1 Answers

To allow folds based on syntax add something like the following to your .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 

Syntax based folding is defined in the syntax files of the language which are located in $VIM/syntax or /usr/share/vim/vimXX/syntax/. But some languages do not have folding rules built into their syntax files; for example Python. For those languages you need to download something from http://vim.sf.net that does folds. Otherwise you will need to use folds based on indents. To do this effectively you will likely want to add the following to your .vimrc file:

set foldmethod=indent set foldnestmax=2 

Other kinds of folding

There are 6 types of folds:

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 

Personally, I only use syntax folds. Usually, I just want to fold the method and not fold every indent level. Inconsistent indenting and weirdly formatted legacy code at work often makes indent folding difficult or impossible. Adding marks to the document is tedious and people who do not use Vim will not maintain them when they edit the document. Manual folds work great until someone edits your code in source control and all your folds are now in the wrong place.

More reading

  1. See :help fold-methods to learn the details of different fold methods.
  2. See :help folding to learn the keyboard commands for manipulate folds.
  3. See :help folds for help on the entire topic of folding.
like image 77
Eric Johnson Avatar answered Nov 15 '22 08:11

Eric Johnson