Vim Tips Wiki

Automatically create and update cscope database

Revision as of 06:30, September 6, 2012 by (Talk)

1,619pages on
this wiki
Tip 1509 Printable Monobook Previous Next

created 2007 · complexity basic · author Zhaojun WU · version 7.0

In order to create or update the cscope database in current directory, the following key mapping would help a bit:

nmap <F11> :!find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files ;
  \:!cscope -b -i cscope.files -f cscope.out<CR>
  \:cs kill -1<CR>:cs add cscope.out<CR>

In the above mapping, I use "find" to collect the C/C++ source code files and (re)create the cscope database; then "kill -1" to kill all cscope database connections and finally, the newly created "cscope.out" database is added by "cs add cscope.out".

There are two limitations in this key mapping:

  1. the current directory should be the root path of the project
  2. I don't know how to get the current cscope data connection number, so that I use "kill -1" to kill "all" cscope database connections, since actually I always only create one connections in one Vim instance. It is not practical if you are using multiple data connections in one Vim instance.

Alternate version

Related to limitation #2 above, it's not actually necessary to kill the cscope connection. The command cs reset can accomplish this purpose, if cscope.out is already selected as the cscope file. This gives the following variant:

nmap <F11> :!find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files<CR>
  \:!cscope -b -i cscope.files -f cscope.out<CR>
  \:cs reset<CR>

Note that this assumes that there already exists a connection to the cscope.out file (which is the case if you tell Vim to automatically init the cscope connection at startup).


Around Wikia's network

Random Wiki