home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / vim53os2.zip / vim-5.3 / doc / if_cscope.txt < prev    next >
Text File  |  1998-08-30  |  14KB  |  368 lines

  1. *if_cscope.txt* For Vim version 5.3.  Last modification: 1998 Aug 17
  2.  
  3.  
  4.           VIM REFERENCE MANUAL    by Andy Kahn
  5.  
  6.                             *cscope*
  7. This document explains how to use Vim's cscope interface.
  8.  
  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|.
  14.  
  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|
  22.  
  23. This is currently for Unix only.
  24. {Vi does not have any of these commands}
  25.  
  26. ==============================================================================
  27. 1. Cscope introduction                    *cscope-intro*
  28.  
  29. The following text is taken from a version of the cscope man page:
  30.  
  31.                     -----
  32.  
  33.   Cscope is an interactive screen-oriented tool that helps you:
  34.  
  35.        Learn how a C program works without endless flipping through a thick
  36.        listing.
  37.  
  38.        Locate the section of code to change to fix a bug without having to
  39.        learn the entire program.
  40.  
  41.        Examine the effect of a proposed change such as adding a value to an
  42.        enum variable.
  43.  
  44.        Verify that a change has been made in all source files such as adding
  45.        an argument to an existing function.
  46.  
  47.        Rename a global variable in all source files.
  48.  
  49.        Change a constant to a preprocessor symbol in selected lines of files.
  50.  
  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?
  62.  
  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.
  69.  
  70.                     -----
  71.  
  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.
  78.  
  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.)
  88.  
  89.  
  90. ==============================================================================
  91. 2. Cscope related commands                *cscope-commands*
  92.  
  93.                             *:cscope* *:cs*
  94. All cscope commands are accessed through suboptions to the main cscope
  95. command, |:cscope|.  The available subcommands are:
  96.  
  97.     add   : Add a new cscope database/connection.
  98.  
  99.     USAGE    :cs add <file|dir> [pre-path] [flags]
  100.  
  101.         [pre-path] is the pathname used with the -P command to cscope.
  102.  
  103.         [flags] are any additional flags you want to pass to cscope.
  104.  
  105.     EXAMPLES
  106.         1. :cs add /usr/local/cdb/cscope.out
  107.  
  108.         2. :cs add /projects/vim/cscope.out /usr/local/vim
  109.  
  110.         3. :cs add cscope.out /usr/local/vim -C
  111.  
  112.     find  : Query cscope.  All cscope query options are available
  113.         except option #5 ("Change this grep pattern").
  114.  
  115.     USAGE    :cs find <querytype> <name>
  116.  
  117.         <querytype> corresponds to the actual cscope line
  118.         interface numbers as well as default nvi commands:
  119.  
  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
  128.  
  129.     EXAMPLES
  130.         1. :cs find c vim_free
  131.  
  132.         2. :cs find 3 vim_free
  133.  
  134.         Examples #1 and #2 perform the same query.
  135.  
  136.         3. :cs find 0 DEFAULT_TERM
  137.  
  138.         Executing example #3 on the source code for Vim 5.1 produces the
  139.         following output:
  140.  
  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):
  174.  
  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.
  181.  
  182.     help  : Show a brief synopsis.
  183.  
  184.         USAGE   :cs help
  185.  
  186.     kill  : Kill a cscope connection.
  187.  
  188.         USAGE   :cs kill <num>
  189.  
  190.     reset : Reinit all cscope connections.
  191.  
  192.         USAGE   :cs reset
  193.  
  194.     show  : Show cscope connections.
  195.  
  196.         USAGE   :cs show
  197.  
  198.                             *:cstag*
  199. If you use cscope as well as ctags, |:cstag| allows you to search one or
  200. the other before making a jump.  For example, you can choose to first
  201. search your cscope database(s) for a match, and if one is not found, then
  202. your tags file(s) will be searched.  The order in which this happens
  203. is determined by the value of |csto|.  See |cscope-options| for more
  204. details.
  205.  
  206. |:cstag| performs the equivalent of ":cs find g" on the identifier when
  207. searching through the cscope database(s).
  208.  
  209. |:cstag| performs the equivalent of |:tjump| on the identifier when searching
  210. through your tags file(s).
  211.  
  212.  
  213. ==============================================================================
  214. 3. Cscope options                    *cscope-options*
  215.  
  216. Use the |:set| command to set all cscope options.  Ideally, you would do
  217. this in one of your startup files (e.g., .vimrc).  Some cscope related
  218. variables are only valid within |.vimrc|.  Setting them after vim has
  219. started will have no effect!
  220.  
  221.                             *cscopeprg* *csprg*
  222. 'cscopeprg' specifies the command to execute cscope.  The default is
  223. "cscope".  For example:
  224. >    :set csprg=/usr/local/bin/cscope
  225.  
  226.                             *cscopetag* *cst*
  227. If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
  228. always use |:cstag| instead of the default :tag behavior.  Effectively, by
  229. setting 'cst', you will always search your cscope databases as well as your
  230. tag files.  The default is off.  Examples:
  231. >    :set cst
  232. >    :set nocst
  233.  
  234.                             *cscopetagorder* *csto*
  235. The value of 'csto' determines the order in which |:cstag| performs a search.
  236. If 'csto' is set to zero, cscope database(s) are searched first, followed
  237. by tag file(s) if cscope did not return any matches.  If 'csto' is set to
  238. one, tag file(s) are searched before cscope database(s).  The default is zero.
  239. Examples:
  240. >    :set csto=0
  241. >    :set csto=1
  242.  
  243.                             *cscopeverbose* *csverb*
  244. If 'cscopeverbose' not set (the default), messages will not be printed
  245. indicating success or failure when adding a cscope database.  Ideally, you
  246. should reset this option in your |.vimrc| before adding any cscope databases,
  247. and after adding them, set it.  From then on, when you add more databases
  248. within Vim, you will get a (hopefully) useful message should the database fail
  249. to be added.  Examples:
  250. >    :set csverb
  251. >    :set nocsverb
  252.  
  253. ==============================================================================
  254. 4. How to use cscope in Vim                *cscope-howtouse*
  255.  
  256. The first thing you need to do is to build a cscope database for your
  257. source files.  For the most basic case, simply do "cscope -b".  Please
  258. refer to the cscope man page for more details.
  259.  
  260. Assuming you have a cscope database, you need to "add" the database to Vim.
  261. This establishes a cscope "connection" and makes it available for Vim to use.
  262. You can do this in your .vimrc file, or you can do it manually after starting
  263. vim.  For example, to add the cscope database "cscope.out", you would do:
  264.  
  265.     :cs add cscope.out
  266.  
  267. You can double-check the result of this by executing ":cs show".  This will
  268. produce output which looks like this:
  269.  
  270.  # pid      database name                  prepend path
  271.  0 28806  cscope.out                  <none>
  272.  
  273. Once a cscope connection is established, you can make queries to cscope and
  274. the results will be printed to you.  Queries are made using the command
  275. ":cs find".  For example:
  276.  
  277.     :cs find g ALIGN_SIZE
  278.  
  279. This can get a little cumbersome since one ends up doing a significant
  280. amount of typing.  Fortunately, there are ways around this by mapping
  281. shortcut keys.  See |cscope-suggestions| for suggested usage.
  282.  
  283. If the results return only one match, you will automatically be taken to it.
  284. If there is more than one match, you will be given a selection screen to pick
  285. the match you want to go to.  After you have jumped to the new location,
  286. simply hit Ctrl-T to get back to the previous one.
  287.  
  288.  
  289. ==============================================================================
  290. 5. Limitations                        *cscope-limitations*
  291.  
  292. Cscope support for Vim is only available on systems that support these four
  293. system calls: fork(), pipe(), execl(), waitpid().  This means it is mostly
  294. limited to Unix systems.
  295.  
  296. Libraries are available for Win95 (win32) which translate a lot of Unix
  297. system calls to the Win32 API.  You can try the GNU-Win32 Project from Cygnus
  298. (http://www.cygnus.com/misc/gnu-win32) or the DJGPP suite of tools
  299. (http://www.delorie.com/djgpp).  I do not know the status of using these with
  300. Vim, so they may or may not work.
  301.  
  302. Additionally, there are a couple of hard-coded limitations:
  303.  
  304.     1. The maximum number of cscope connections allowed is 8.  Do you
  305.     really need more?
  306.  
  307.     2. Doing a |:tjump| when |:cstag| searches the tag files is not
  308.     configurable (e.g., you can't do a tselect instead).
  309.  
  310. ==============================================================================
  311. 6. Suggested usage                    *cscope-suggestions*
  312.  
  313. Put these entries in your .vimrc (adjust the pathname accordingly to your
  314. setup):
  315.  
  316.     if has("cscope")
  317.         set csprg=/usr/local/bin/cscope
  318.         set csto=0
  319.         set cst
  320.         set nocsverb
  321.         cs add cscope.out
  322.         set csverb
  323.     endif
  324.  
  325. By setting 'cscopetag', we have effectively replaced all instances of the :tag
  326. command with :cstag.  This includes :tag, Ctrl-], and "vim -t".  In doing
  327. this, the regular tag command not only searches your ctags generated tag
  328. files, but your cscope databases as well.
  329.  
  330. Some users may want to keep the regular tag behavior and have a different
  331. shortcut to access :cstag.  For example, one could map Ctrl-_  (underscore)
  332. to :cstag with the following command:
  333.  
  334.     map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>
  335.  
  336. A couple of very commonly used cscope queries (using ":cs find") is to
  337. find all functions calling a certain function and to find all occurances
  338. of a particular C symbol.  To do this, you can use these mappings as an
  339. example:
  340.  
  341.     map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
  342.     map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>
  343.  
  344. These mappings for Ctrl-] (right bracket) and Ctrl-\ (backslash) allow you to
  345. place your cursor over the function name or C symbol and quickly query cscope
  346. for any matches.
  347.  
  348. ==============================================================================
  349. 7. Cscope availability and information            *cscope-info*
  350.  
  351. If you do not already have cscope (it did not come with your compiler
  352. license), then you will probably have to buy it.  According to the nvi
  353. documentation:
  354.  
  355.     You can buy version 13.3 source with an unrestricted license
  356.     for $400 from AT&T Software Solutions by calling +1-800-462-8146.
  357.  
  358. In Solaris 2.x, if you have the C compiler license, you will also have
  359. cscope.  Both are usually located under /opt/SUNWspro/bin
  360.  
  361. The cscope interface/support for Vim was originally written by
  362. Andy Kahn <kahn@zk3.dec.com>.  The original structure (as well as a tiny
  363. bit of code) was adapted from the cscope interface in nvi.  Please report
  364. any problems, suggestions, patches, et al., you have for the usage of
  365. cscope within Vim to him.
  366.  
  367.  vim:tw=78:ts=8:sw=8:
  368.