Initial bulk commit for "Git on MSys"
[msysgit/historical-msysgit.git] / share / vim / vim58 / doc / if_cscope.txt
blob6c98ad0464702a5bc46ff2917a488cbd0b98e408
1 *if_cscope.txt* For Vim version 5.8.  Last change: 2000 May 06
4                   VIM REFERENCE MANUAL    by Andy Kahn
6                                                         *cscope* *Cscope*
7 This document explains how to use Vim's cscope interface.
9 Cscope is a tool like ctags, but think of it as ctags on steroids since it
10 does a lot more than what ctags provides.  In Vim, jumping to a result from
11 a cscope query is just like jumping to any tag; it is saved on the tag stack
12 so that with the right keyboard mappings, you can jump back and forth between
13 functions as you normally would with |tags|.
15 1. Cscope introduction          |cscope-intro|
16 2. Cscope related commands      |cscope-commands|
17 3. Cscope options               |cscope-options|
18 4. How to use cscope in Vim     |cscope-howtouse|
19 5. Limitations                  |cscope-limitations|
20 6. Suggested usage              |cscope-suggestions|
21 7. Availability & Information   |cscope-info|
23 This is currently for Unix only.
24 {Vi does not have any of these commands}
26 ==============================================================================
27 1. Cscope introduction                                  *cscope-intro*
29 The following text is taken from a version of the cscope man page:
31                                     -----
33   Cscope is an interactive screen-oriented tool that helps you:
35        Learn how a C program works without endless flipping through a thick
36        listing.
38        Locate the section of code to change to fix a bug without having to
39        learn the entire program.
41        Examine the effect of a proposed change such as adding a value to an
42        enum variable.
44        Verify that a change has been made in all source files such as adding
45        an argument to an existing function.
47        Rename a global variable in all source files.
49        Change a constant to a preprocessor symbol in selected lines of files.
51   It is designed to answer questions like:
52        Where is this symbol used?
53        Where is it defined?
54        Where did this variable get its value?
55        What is this global symbol's definition?
56        Where is this function in the source files?
57        What functions call this function?
58        What functions are called by this function?
59        Where does the message "out of space" come from?
60        Where is this source file in the directory structure?
61        What files include this header file?
63   Cscope answers these questions from a symbol database that it builds the
64   first time it is used on the source files.  On a subsequent call, cscope
65   rebuilds the database only if a source file has changed or the list of
66   source files is different.  When the database is rebuilt the data for the
67   unchanged files is copied from the old database, which makes rebuilding
68   much faster than the initial build.
70                                     -----
72 When cscope is normally invoked, you will get a full-screen selection
73 screen allowing you to make a query for one of the above questions.
74 However, once a match is found to your query and you have entered your
75 text editor to edit the source file containing match, you cannot simply
76 jump from tag to tag as you normally would with vi's Ctrl-] or :tag
77 command.
79 Vim's cscope interface is done by invoking cscope with its line-oriented
80 interface, and then parsing the output returned from a query.  The end
81 result is that cscope query results become just like regular tags, so
82 you can jump to them just like you do with normal tags (Ctrl-] or :tag)
83 and then go back by popping off the tagstack with Ctrl-T.  (Please note
84 however, that you don't actually jump to a cscope tag simply by doing
85 Ctrl-] or :tag without remapping these commands or setting an option.
86 See the remaining sections on how the cscope interface works and for
87 suggested use.)
90 ==============================================================================
91 2. Cscope related commands                              *cscope-commands*
93                                                         *:cscope* *:cs*
94 All cscope commands are accessed through suboptions to the main cscope
95 command, |:cscope|.  The available subcommands are:
97     add   : Add a new cscope database/connection.
99         USAGE   :cs add {file|dir} [pre-path] [flags]
101             [pre-path] is the pathname used with the -P command to cscope.
103             [flags] are any additional flags you want to pass to cscope.
105         EXAMPLES
106             1. :cs add /usr/local/cdb/cscope.out
108             2. :cs add /projects/vim/cscope.out /usr/local/vim
110             3. :cs add cscope.out /usr/local/vim -C
112     find  : Query cscope.  All cscope query options are available
113             except option #5 ("Change this grep pattern").
115         USAGE   :cs find {querytype} {name}
117             {querytype} corresponds to the actual cscope line
118             interface numbers as well as default nvi commands:
120                 0 or s: Find this C symbol
121                 1 or g: Find this definition
122                 2 or d: Find functions called by this function
123                 3 or c: Find functions calling this function
124                 4 or t: Find assignments to
125                 6 or e: Find this egrep pattern
126                 7 or f: Find this file
127                 8 or i: Find files #including this file
129         EXAMPLES
130             1. :cs find c vim_free
132             2. :cs find 3 vim_free
134             Examples #1 and #2 perform the same query.
136             3. :cs find 0 DEFAULT_TERM
138             Executing example #3 on the source code for Vim 5.1 produces the
139             following output:
141             Cscope tag: DEFAULT_TERM
142                #   line  filename / context / line
143                1   1009  vim-5.1-gtk/src/term.c <<GLOBAL>>
144                          #define DEFAULT_TERM (char_u *)"amiga"
145                2   1013  vim-5.1-gtk/src/term.c <<GLOBAL>>
146                          #define DEFAULT_TERM (char_u *)"win32"
147                3   1017  vim-5.1-gtk/src/term.c <<GLOBAL>>
148                          #define DEFAULT_TERM (char_u *)"pcterm"
149                4   1021  vim-5.1-gtk/src/term.c <<GLOBAL>>
150                          #define DEFAULT_TERM (char_u *)"ansi"
151                5   1025  vim-5.1-gtk/src/term.c <<GLOBAL>>
152                          #define DEFAULT_TERM (char_u *)"vt52"
153                6   1029  vim-5.1-gtk/src/term.c <<GLOBAL>>
154                          #define DEFAULT_TERM (char_u *)"os2ansi"
155                7   1033  vim-5.1-gtk/src/term.c <<GLOBAL>>
156                          #define DEFAULT_TERM (char_u *)"ansi"
157                8   1037  vim-5.1-gtk/src/term.c <<GLOBAL>>
158                          # undef DEFAULT_TERM
159                9   1038  vim-5.1-gtk/src/term.c <<GLOBAL>>
160                          #define DEFAULT_TERM (char_u *)"beos-ansi"
161               10   1042  vim-5.1-gtk/src/term.c <<GLOBAL>>
162                          #define DEFAULT_TERM (char_u *)"mac-ansi"
163               11   1335  vim-5.1-gtk/src/term.c <<set_termname>>
164                          term = DEFAULT_TERM;
165               12   1459  vim-5.1-gtk/src/term.c <<set_termname>>
166                          if (STRCMP(term, DEFAULT_TERM))
167               13   1826  vim-5.1-gtk/src/term.c <<termcapinit>>
168                          term = DEFAULT_TERM;
169               14   1833  vim-5.1-gtk/src/term.c <<termcapinit>>
170                          term = DEFAULT_TERM;
171               15   3635  vim-5.1-gtk/src/term.c <<update_tcap>>
172                          p = find_builtin_term(DEFAULT_TERM);
173             Enter nr of choice (<CR> to abort):
175             The output shows several pieces of information:
176             1. The tag number (there are 15 in this example).
177             2. The line number where the tag occurs.
178             3. The filename where the tag occurs.
179             4. The context of the tag (e.g., global, or the function name).
180             5. The line from the file itself.
182     help  : Show a brief synopsis.
184             USAGE   :cs help
186     kill  : Kill a cscope connection.
188             USAGE   :cs kill {num|partial_name}
190             To kill a cscope connection, the connection number or a partial
191             name must be specified.  The partial name is simply any part of
192             the pathname of the cscope database.  Kill a cscope connection
193             using the partial name with caution!
195     reset : Reinit all cscope connections.
197             USAGE   :cs reset
199     show  : Show cscope connections.
201             USAGE   :cs show
203                                                         *:cstag*
204 If you use cscope as well as ctags, |:cstag| allows you to search one or
205 the other before making a jump.  For example, you can choose to first
206 search your cscope database(s) for a match, and if one is not found, then
207 your tags file(s) will be searched.  The order in which this happens
208 is determined by the value of |csto|.  See |cscope-options| for more
209 details.
211 |:cstag| performs the equivalent of ":cs find g" on the identifier when
212 searching through the cscope database(s).
214 |:cstag| performs the equivalent of |:tjump| on the identifier when searching
215 through your tags file(s).
218 ==============================================================================
219 3. Cscope options                                       *cscope-options*
221 Use the |:set| command to set all cscope options.  Ideally, you would do
222 this in one of your startup files (e.g., .vimrc).  Some cscope related
223 variables are only valid within |.vimrc|.  Setting them after vim has
224 started will have no effect!
226                                                         *cscopeprg* *csprg*
227 'cscopeprg' specifies the command to execute cscope.  The default is
228 "cscope".  For example:
229 >       :set csprg=/usr/local/bin/cscope
231                                                         *cscopetag* *cst*
232 If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
233 always use |:cstag| instead of the default :tag behavior.  Effectively, by
234 setting 'cst', you will always search your cscope databases as well as your
235 tag files.  The default is off.  Examples:
236 >       :set cst
237 >       :set nocst
239                                                         *cscopetagorder* *csto*
240 The value of 'csto' determines the order in which |:cstag| performs a search.
241 If 'csto' is set to zero, cscope database(s) are searched first, followed
242 by tag file(s) if cscope did not return any matches.  If 'csto' is set to
243 one, tag file(s) are searched before cscope database(s).  The default is zero.
244 Examples:
245 >       :set csto=0
246 >       :set csto=1
248                                                         *cscopeverbose* *csverb*
249 If 'cscopeverbose' not set (the default), messages will not be printed
250 indicating success or failure when adding a cscope database.  Ideally, you
251 should reset this option in your |.vimrc| before adding any cscope databases,
252 and after adding them, set it.  From then on, when you add more databases
253 within Vim, you will get a (hopefully) useful message should the database fail
254 to be added.  Examples:
255 >       :set csverb
256 >       :set nocsverb
258 ==============================================================================
259 4. How to use cscope in Vim                             *cscope-howtouse*
261 The first thing you need to do is to build a cscope database for your
262 source files.  For the most basic case, simply do "cscope -b".  Please
263 refer to the cscope man page for more details.
265 Assuming you have a cscope database, you need to "add" the database to Vim.
266 This establishes a cscope "connection" and makes it available for Vim to use.
267 You can do this in your .vimrc file, or you can do it manually after starting
268 vim.  For example, to add the cscope database "cscope.out", you would do:
270         :cs add cscope.out
272 You can double-check the result of this by executing ":cs show".  This will
273 produce output which looks like this:
275  # pid    database name                       prepend path
276  0 28806  cscope.out                          <none>
278 Once a cscope connection is established, you can make queries to cscope and
279 the results will be printed to you.  Queries are made using the command
280 ":cs find".  For example:
282         :cs find g ALIGN_SIZE
284 This can get a little cumbersome since one ends up doing a significant
285 amount of typing.  Fortunately, there are ways around this by mapping
286 shortcut keys.  See |cscope-suggestions| for suggested usage.
288 If the results return only one match, you will automatically be taken to it.
289 If there is more than one match, you will be given a selection screen to pick
290 the match you want to go to.  After you have jumped to the new location,
291 simply hit Ctrl-T to get back to the previous one.
294 ==============================================================================
295 5. Limitations                                          *cscope-limitations*
297 Cscope support for Vim is only available on systems that support these four
298 system calls: fork(), pipe(), execl(), waitpid().  This means it is mostly
299 limited to Unix systems.
301 Libraries are available for Win95 (win32) which translate a lot of Unix
302 system calls to the Win32 API.  You can try the GNU-Win32 Project from Cygnus
303 (http://www.cygnus.com/misc/gnu-win32) or the DJGPP suite of tools
304 (http://www.delorie.com/djgpp/).  I do not know the status of using these with
305 Vim, so they may or may not work.
307 Additionally, there are a couple of hard-coded limitations:
309     1. The maximum number of cscope connections allowed is 8.  Do you
310     really need more?
312     2. Doing a |:tjump| when |:cstag| searches the tag files is not
313     configurable (e.g., you can't do a tselect instead).
315 ==============================================================================
316 6. Suggested usage                                      *cscope-suggestions*
318 Put these entries in your .vimrc (adjust the pathname accordingly to your
319 setup):
321         if has("cscope")
322                 set csprg=/usr/local/bin/cscope
323                 set csto=0
324                 set cst
325                 set nocsverb
326                 cs add cscope.out
327                 set csverb
328         endif
330 By setting 'cscopetag', we have effectively replaced all instances of the :tag
331 command with :cstag.  This includes :tag, Ctrl-], and "vim -t".  In doing
332 this, the regular tag command not only searches your ctags generated tag
333 files, but your cscope databases as well.
335 Some users may want to keep the regular tag behavior and have a different
336 shortcut to access :cstag.  For example, one could map Ctrl-_  (underscore)
337 to :cstag with the following command:
339         map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>
341 A couple of very commonly used cscope queries (using ":cs find") is to
342 find all functions calling a certain function and to find all occurrences
343 of a particular C symbol.  To do this, you can use these mappings as an
344 example:
346         map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
347         map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>
349 These mappings for Ctrl-] (right bracket) and Ctrl-\ (backslash) allow you to
350 place your cursor over the function name or C symbol and quickly query cscope
351 for any matches.
353 ==============================================================================
354 7. Cscope availability and information                  *cscope-info*
356 If you do not already have cscope (it did not come with your compiler
357 license or OS distribution), then you can download it for free from:
358         http://cscope.sourceforge.net/
359 This is released by SCO under the BSD license.
361 If you want a newer version of cscope, you will probably have to buy it.
362 According to the nvi documentation:
364         You can buy version 13.3 source with an unrestricted license
365         for $400 from AT&T Software Solutions by calling +1-800-462-8146.
367 In Solaris 2.x, if you have the C compiler license, you will also have
368 cscope.  Both are usually located under /opt/SUNWspro/bin
370 SGI developers can also get it.  Currently a tardist file can be found at:
371         ftp://ftp.openage.com/pub/Sgi/Binaries/Cscope-13_3_tardist.gz
372         https://toolbox.sgi.com/toolbox/utilities/cscope/
373 The second one is for those who have a password for the SGI toolbox.
375 There is source to an older version of a cscope clone (called "cs") available
376 on the net.  Due to various reasons, this is not supported with Vim.
378 The cscope interface/support for Vim was originally written by
379 Andy Kahn <ackahn@netapp.com>.  The original structure (as well as a tiny
380 bit of code) was adapted from the cscope interface in nvi.  Please report
381 any problems, suggestions, patches, et al., you have for the usage of
382 cscope within Vim to him.
384  vim:tw=78:ts=8:sw=8: