tells if the tags file is sorted or not. The default
is to assume a sorted tags file, which makes a tags search a lot faster, but
doesn't work if the tags file isn't sorted.
The 'taglength' option can be used to tell Vim the number of significant
characters in a tag.
==============================================================================
*29.2* The preview window
When you edit code that contains a function call, you need to use the correct
arguments. To know what values to pass you can look at how the function is
defined. The tags mechanism works very well for this. Preferably the
definition is displayed in another window. For this the preview window can be
used.
To open a preview window to display the function "write_char": >
:ptag write_char
Vim will open a window, and jumps to the tag "write_char". Then it takes you
back to the original position. Thus you can continue typing without the need
to use a CTRL-W command.
If the name of a function appears in the text, you can get its definition
in the preview window with: >
CTRL-W }
There is a script that automatically displays the text where the word under
the cursor was defined. See |CursorHold-example|.
To close the preview window use this command: >
:pclose
To edit a specific file in the preview window, use ":pedit". This can be
useful to edit a header file, for example: >
:pedit defs.h
Finally, ":psearch" can be used to find a word in the current file and any
included files and display the match in the preview window. This is
especially useful when using library functions, for which you do not have a
tags file. Example: >
:psearch popen
This will show the "stdio.h" file in the preview window, with the function
prototype for popen(): >c
FILE *popen __P((const char *, const char *));
You can specify the height of the preview window, when it is opened, with the
'previewheight' option.
==============================================================================
*29.3* Moving through a program
Since a program is structured, Vim can recognize items in it. Specific
commands can be used to move around.
C programs often contain constructs like this: >c
#ifdef USE_POPEN
fd = popen("ls", "r")
#else
fd = fopen("tmp", "w")
#endif
But then much longer, and possibly nested. Position the cursor on the
"#ifdef" and press %. Vim will jump to the "#else". Pressing % again takes
you to the "#endif". Another % takes you to the "#ifdef" again.
When the construct is nested, Vim will find the matching items. This is a
good way to check if you didn't forget an "#endif".
When you are somewhere inside a "#if" - "#endif", you can jump to the start
of it with: >
[#
If you are not after a "#if" or "#ifdef" Vim will beep. To jump forward to
the next "#else" or "#endif" use: >
]#
These two commands skip any "#if" - "#endif" blocks that they encounter.
Example:
#if defined(HAS_INC_H) ~
a = a + inc(); ~
# ifdef USE_THEME ~
a += 3; ~
# endif ~
set_width(a); ~
With the cursor in the last line, "[#" moves to the first line. The "#ifdef"
- "#endif" block in the middle is skipped.
MOVING IN CODE BLOCKS
In C code blocks are enclosed in {}. These can get pretty long. To move to
the start of the outer block use the "[[" command. Use "][" to find the end.
This assumes that the "{" and "}" are in the first column.
The [{ command moves to the start of the current block. It skips over
pairs of {} at the same level. "]}" jumps to the end.
An overview:
function(int a)
+-> {
| if (a)
| +-> {
[[ | | for (;;) --+
| | +-> { |
| [{ | | foo(32); | --+
| | [{ | if (bar(a)) --+ | ]} |
+-- | +-- break; | ]} | |
| } <-+ | | ][
+-- foobar(a) | |
} <-+ |
} <-+
When writing C++ or Java, the outer {} block is for the class. The next level
of {} is for a method. When