首先需要实现vim需要干事的函数(在_vimrc文件中添加下面两个函数):
1:断开scope数据库连接
function! disable_cscope()
cs kill -1
endfunction
2:重新连接scope数据库(我的数据库在E:\Linux_kernel\linux-2.6.11.1\目录中)
function! connect_cscope()
cs add E:\Linux_kernel\linux-2.6.11.1\cscope_bak.out
endfunction
3:后台更新数据库的bat文件
@echo off
%2 //进入运行文件时传入的第二个参数指示的盘
cd %1 //进入第一个参数指定的具体目录
:loop
del cscope.out cscope.files //删除老的数据库文件
echo "cscope db create"
dir /s /b *.c *.h > cscope.files //生成文件列表
cscope -Rbqk //生成数据库文件
cmd /c vim --servername gvim --remote-expr "disable_cscope()" //发指令让vim断开cscope连接
copy %1\cscope.out %1\cscope_bak.out //拷贝cscope.out为cscope_bak.out
cmd /c vim --servername gvim --remote-expr "connect_cscope()" //发指令让vim重新连接数据库
echo sleep 180s
ping -n 180 localhost >nul //通过ping本机实现延时,时间自定
goto loop
@echo on
代码解释:
1、 其中一个值得解释的地方是重新连接的是cscope.out的副本,而不是原件,这样做的目的在于,不让vim断开连接太久。首先我们是删除了数据库文件 才开始再生成的,如果连接的是原件,则在删除之前就需要断开连接,且生成文件列表和数据库上非常耗时的,这样就会导致vim中长时间没有cscope的数 据库连接而让人忍受不了。使用了副本就只需要等到数据库生成后,断开连接,进行一次拷贝,再重新连接一次副本。这个断开的时间非常短,人是感觉不到的。
2、另一个值得解释的地方在于运行文件的时候需要传入参数,如:我的bat文件名叫auto_load_cscope.bat,而我的工程目录在E:\Linux_kernel\linux-2.6.11.1\中,我运行文件的方法是在cmd中进入auto_load_cscope.bat所在的目录后输入auto_load_cscope.bat
二、接下来就到linux了,在linux中会简单得多,因为它可以操作打开的文件,它可以不需要断开连接就能复制数据库文件。
#!/bin/bash
cd $1
while :; do
rm -f cscope.out
cscope -Rbqk
cp cscope.out cscope_bak.out
sleep 180s
done
解释:
1、在linux中打开vim后需要手动连接数据库的副本,以后就高枕无忧了。
2、同样使用参数运行.sh文件:进入.sh文件的目录后输入命令./auto_load_cscope.sh /home/jiang/work/Linux_kernel/linux-2.6.11.1/ &即可。
3、在linux中没有打开的文件不能操作的限制后,进行多工程编辑将比windows下容易得多,直接用不同的参数运行多次.sh文件,并打开不同的工程即可。
到此,我的实现就完成了。