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:
- the current directory should be the root path of the project
- 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.
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).