Update runtime files
[MacVim.git] / runtime / doc / usr_28.txt
blob0ed2e34c9e486b61cf1909b5bf1516615a3d96a5
1 *usr_28.txt*    For Vim version 7.1.  Last change: 2008 Jun 14
3                      VIM USER MANUAL - by Bram Moolenaar
5                                    Folding
8 Structured text can be separated in sections.  And sections in sub-sections.
9 Folding allows you to display a section as one line, providing an overview.
10 This chapter explains the different ways this can be done.
12 |28.1|  What is folding?
13 |28.2|  Manual folding
14 |28.3|  Working with folds
15 |28.4|  Saving and restoring folds
16 |28.5|  Folding by indent
17 |28.6|  Folding with markers
18 |28.7|  Folding by syntax
19 |28.8|  Folding by expression
20 |28.9|  Folding unchanged lines
21 |28.10| Which fold method to use?
23      Next chapter: |usr_29.txt|  Moving through programs
24  Previous chapter: |usr_27.txt|  Search commands and patterns
25 Table of contents: |usr_toc.txt|
27 ==============================================================================
28 *28.1*  What is folding?
30 Folding is used to show a range of lines in the buffer as a single line on the
31 screen.  Like a piece of paper which is folded to make it shorter:
33         +------------------------+
34         | line 1                 |
35         | line 2                 |
36         | line 3                 |
37         |_______________________ |
38         \                        \
39          \________________________\
40          / folded lines           /
41         /________________________/
42         | line 12                |
43         | line 13                |
44         | line 14                |
45         +------------------------+
47 The text is still in the buffer, unchanged.  Only the way lines are displayed
48 is affected by folding.
50 The advantage of folding is that you can get a better overview of the
51 structure of text, by folding lines of a section and replacing it with a line
52 that indicates that there is a section.
54 ==============================================================================
55 *28.2*  Manual folding
57 Try it out: Position the cursor in a paragraph and type: >
59         zfap
61 You will see that the paragraph is replaced by a highlighted line.  You have
62 created a fold.  |zf| is an operator and |ap| a text object selection.  You
63 can use the |zf| operator with any movement command to create a fold for the
64 text that it moved over.  |zf| also works in Visual mode.
66 To view the text again, open the fold by typing: >
68         zo
70 And you can close the fold again with: >
72         zc
74 All the folding commands start with "z".  With some fantasy, this looks like a
75 folded piece of paper, seen from the side.  The letter after the "z" has a
76 mnemonic meaning to make it easier to remember the commands:
78         zf      F-old creation
79         zo      O-pen a fold
80         zc      C-lose a fold
82 Folds can be nested: A region of text that contains folds can be folded
83 again.  For example, you can fold each paragraph in this section, and then
84 fold all the sections in this chapter.  Try it out.  You will notice that
85 opening the fold for the whole chapter will restore the nested folds as they
86 were, some may be open and some may be closed.
88 Suppose you have created several folds, and now want to view all the text.
89 You could go to each fold and type "zo".  To do this faster, use this command: >
91         zr
93 This will R-educe the folding.  The opposite is: >
95         zm
97 This folds M-ore.  You can repeat "zr" and "zm" to open and close nested folds
98 of several levels.
100 If you have nested several levels deep, you can open all of them with: >
102         zR
104 This R-educes folds until there are none left.  And you can close all folds
105 with: >
107         zM
109 This folds M-ore and M-ore.
111 You can quickly disable the folding with the |zn| command.  Then |zN| brings
112 back the folding as it was.  |zi| toggles between the two.  This is a useful
113 way of working:
114 - create folds to get overview on your file
115 - move around to where you want to do your work
116 - do |zi| to look at the text and edit it
117 - do |zi| again to go back to moving around
119 More about manual folding in the reference manual: |fold-manual|
121 ==============================================================================
122 *28.3*  Working with folds
124 When some folds are closed, movement commands like "j" and "k" move over a
125 fold like it was a single, empty line.  This allows you to quickly move around
126 over folded text.
128 You can yank, delete and put folds as if it was a single line.  This is very
129 useful if you want to reorder functions in a program.  First make sure that
130 each fold contains a whole function (or a bit less) by selecting the right
131 'foldmethod'.  Then delete the function with "dd", move the cursor and put it
132 with "p".  If some lines of the function are above or below the fold, you can
133 use Visual selection:
134 - put the cursor on the first line to be moved
135 - hit "V" to start Visual mode
136 - put the cursor on the last line to be moved
137 - hit "d" to delete the selected lines.
138 - move the cursor to the new position and "p"ut the lines there.
140 It is sometimes difficult to see or remember where a fold is located, thus
141 where a |zo| command would actually work.  To see the defined folds: >
143         :set foldcolumn=4
145 This will show a small column on the left of the window to indicate folds.
146 A "+" is shown for a closed fold.  A "-" is shown at the start of each open
147 fold and "|" at following lines of the fold.
149 You can use the mouse to open a fold by clicking on the "+" in the foldcolumn.
150 Clicking on the "-" or a "|" below it will close an open fold.
152 To open all folds at the cursor line use |zO|.
153 To close all folds at the cursor line use |zC|.
154 To delete a fold at the cursor line use |zd|.
155 To delete all folds at the cursor line use |zD|.
157 When in Insert mode, the fold at the cursor line is never closed.  That allows
158 you to see what you type!
160 Folds are opened automatically when jumping around or moving the cursor left
161 or right.  For example, the "0" command opens the fold under the cursor
162 (if 'foldopen' contains "hor", which is the default).  The 'foldopen' option
163 can be changed to open folds for specific commands.  If you want the line
164 under the cursor always to be open, do this: >
166         :set foldopen=all
168 Warning: You won't be able to move onto a closed fold then.  You might want to
169 use this only temporarily and then set it back to the default: >
171         :set foldopen&
173 You can make folds close automatically when you move out of it: >
175         :set foldclose=all
177 This will re-apply 'foldlevel' to all folds that don't contain the cursor.
178 You have to try it out if you like how this feels.  Use |zm| to fold more and
179 |zr| to fold less (reduce folds).
181 The folding is local to the window.  This allows you to open two windows on
182 the same buffer, one with folds and one without folds.  Or one with all folds
183 closed and one with all folds open.
185 ==============================================================================
186 *28.4*  Saving and restoring folds
188 When you abandon a file (starting to edit another one), the state of the folds
189 is lost.  If you come back to the same file later, all manually opened and
190 closed folds are back to their default.  When folds have been created
191 manually, all folds are gone!  To save the folds use the |:mkview| command: >
193         :mkview
195 This will store the settings and other things that influence the view on the
196 file.  You can change what is stored with the 'viewoptions' option.
197 When you come back to the same file later, you can load the view again: >
199         :loadview
201 You can store up to ten views on one file.  For example, to save the current
202 setup as the third view and load the second view: >
204         :mkview 3
205         :loadview 2
207 Note that when you insert or delete lines the views might become invalid.
208 Also check out the 'viewdir' option, which specifies where the views are
209 stored.  You might want to delete old views now and then.
211 ==============================================================================
212 *28.5*  Folding by indent
214 Defining folds with |zf| is a lot of work.  If your text is structured by
215 giving lower level items a larger indent, you can use the indent folding
216 method.  This will create folds for every sequence of lines with the same
217 indent.  Lines with a larger indent will become nested folds.  This works well
218 with many programming languages.
220 Try this by setting the 'foldmethod' option: >
222         :set foldmethod=indent
224 Then you can use the |zm| and |zr| commands to fold more and reduce folding.
225 It's easy to see on this example text:
227 This line is not indented
228         This line is indented once
229                 This line is indented twice
230                 This line is indented twice
231         This line is indented once
232 This line is not indented
233         This line is indented once
234         This line is indented once
236 Note that the relation between the amount of indent and the fold depth depends
237 on the 'shiftwidth' option.  Each 'shiftwidth' worth of indent adds one to the
238 depth of the fold.  This is called a fold level.
240 When you use the |zr| and |zm| commands you actually increase or decrease the
241 'foldlevel' option.  You could also set it directly: >
243         :set foldlevel=3
245 This means that all folds with three times a 'shiftwidth' indent or more will
246 be closed.  The lower the foldlevel, the more folds will be closed.  When
247 'foldlevel' is zero, all folds are closed.  |zM| does set 'foldlevel' to zero.
248 The opposite command |zR| sets 'foldlevel' to the deepest fold level that is
249 present in the file.
251 Thus there are two ways to open and close the folds:
252 (A) By setting the fold level.
253     This gives a very quick way of "zooming out" to view the structure of the
254     text, move the cursor, and "zoom in" on the text again.
256 (B) By using |zo| and |zc| commands to open or close specific folds.
257     This allows opening only those folds that you want to be open, while other
258     folds remain closed.
260 This can be combined: You can first close most folds by using |zm| a few times
261 and then open a specific fold with |zo|.  Or open all folds with |zR| and
262 then close specific folds with |zc|.
264 But you cannot manually define folds when 'foldmethod' is "indent", as that
265 would conflict with the relation between the indent and the fold level.
267 More about folding by indent in the reference manual: |fold-indent|
269 ==============================================================================
270 *28.6*  Folding with markers
272 Markers in the text are used to specify the start and end of a fold region.
273 This gives precise control over which lines are included in a fold.  The
274 disadvantage is that the text needs to be modified.
276 Try it: >
278         :set foldmethod=marker
280 Example text, as it could appear in a C program:
282         /* foobar () {{{ */
283         int foobar()
284         {
285                 /* return a value {{{ */
286                 return 42;
287                 /* }}} */
288         }
289         /* }}} */
291 Notice that the folded line will display the text before the marker.  This is
292 very useful to tell what the fold contains.
294 It's quite annoying when the markers don't pair up correctly after moving some
295 lines around.  This can be avoided by using numbered markers.  Example:
297         /* global variables {{{1 */
298         int varA, varB;
300         /* functions {{{1 */
301         /* funcA() {{{2 */
302         void funcA() {}
304         /* funcB() {{{2 */
305         void funcB() {}
306         /* }}}1 */
308 At every numbered marker a fold at the specified level begins.  This will make
309 any fold at a higher level stop here.  You can just use numbered start markers
310 to define all folds.  Only when you want to explicitly stop a fold before
311 another starts you need to add an end marker.
313 More about folding with markers in the reference manual: |fold-marker|
315 ==============================================================================
316 *28.7*  Folding by syntax
318 For each language Vim uses a different syntax file.  This defines the colors
319 for various items in the file.  If you are reading this in Vim, in a terminal
320 that supports colors, the colors you see are made with the "help" syntax file.
321    In the syntax files it is possible to add syntax items that have the "fold"
322 argument.  These define a fold region.  This requires writing a syntax file
323 and adding these items in it.  That's not so easy to do.  But once it's done,
324 all folding happens automatically.
325    Here we'll assume you are using an existing syntax file.  Then there is
326 nothing more to explain.  You can open and close folds as explained above.
327 The folds will be created and deleted automatically when you edit the file.
329 More about folding by syntax in the reference manual: |fold-syntax|
331 ==============================================================================
332 *28.8*  Folding by expression
334 This is similar to folding by indent, but instead of using the indent of a
335 line a user function is called to compute the fold level of a line.  You can
336 use this for text where something in the text indicates which lines belong
337 together.  An example is an e-mail message where the quoted text is indicated
338 by a ">" before the line.  To fold these quotes use this: >
340         :set foldmethod=expr
341         :set foldexpr=strlen(substitute(substitute(getline(v:lnum),'\\s','',\"g\"),'[^>].*','',''))
343 You can try it out on this text:
345 > quoted text he wrote
346 > quoted text he wrote
347 > > double quoted text I wrote
348 > > double quoted text I wrote
350 Explanation for the 'foldexpr' used in the example (inside out):
351    getline(v:lnum)                      gets the current line
352    substitute(...,'\\s','','g')         removes all white space from the line
353    substitute(...,'[^>].*','','')       removes everything after leading '>'s
354    strlen(...)                          counts the length of the string, which
355                                         is the number of '>'s found
357 Note that a backslash must be inserted before every space, double quote and
358 backslash for the ":set" command.  If this confuses you, do >
360         :set foldexpr
362 to check the actual resulting value.  To correct a complicated expression, use
363 the command-line completion: >
365         :set foldexpr=<Tab>
367 Where <Tab> is a real Tab.  Vim will fill in the previous value, which you can
368 then edit.
370 When the expression gets more complicated you should put it in a function and
371 set 'foldexpr' to call that function.
373 More about folding by expression in the reference manual: |fold-expr|
375 ==============================================================================
376 *28.9*  Folding unchanged lines
378 This is useful when you set the 'diff' option in the same window.  The
379 |vimdiff| command does this for you.  Example: >
381         :setlocal diff foldmethod=diff scrollbind nowrap foldlevel=1
383 Do this in every window that shows a different version of the same file.  You
384 will clearly see the differences between the files, while the text that didn't
385 change is folded.
387 For more details see |fold-diff|.
389 ==============================================================================
390 *28.10* Which fold method to use?
392 All these possibilities make you wonder which method you should chose.
393 Unfortunately, there is no golden rule.  Here are some hints.
395 If there is a syntax file with folding for the language you are editing, that
396 is probably the best choice.  If there isn't one, you might try to write it.
397 This requires a good knowledge of search patterns.  It's not easy, but when
398 it's working you will not have to define folds manually.
400 Typing commands to manually fold regions can be used for unstructured text.
401 Then use the |:mkview| command to save and restore your folds.
403 The marker method requires you to change the file.  If you are sharing the
404 files with other people or you have to meet company standards, you might not
405 be allowed to add them.
406    The main advantage of markers is that you can put them exactly where you
407 want them.  That avoids that a few lines are missed when you cut and paste
408 folds.  And you can add a comment about what is contained in the fold.
410 Folding by indent is something that works in many files, but not always very
411 well.  Use it when you can't use one of the other methods.  However, it is
412 very useful for outlining.  Then you specifically use one 'shiftwidth' for
413 each nesting level.
415 Folding with expressions can make folds in almost any structured text.  It is
416 quite simple to specify, especially if the start and end of a fold can easily
417 be recognized.
418    If you use the "expr" method to define folds, but they are not exactly how
419 you want them, you could switch to the "manual" method.  This will not remove
420 the defined folds.  Then you can delete or add folds manually.
422 ==============================================================================
424 Next chapter: |usr_29.txt|  Moving through programs
426 Copyright: see |manual-copyright|  vim:tw=78:ts=8:ft=help:norl: