您的位置:首页 > 数据库

Windows下的VIM - 如何自动在后台更新cscope数据库文件

2013-02-18 19:40 393 查看
以前老是要退出 VIM 才能更新 cscope database~~ 網路上終於找到這篇~~

在VIM中使用cscope编辑代码的时候,会遇到以一个恼人的问题,当你对一些文件进行修改啊修改

啊的时候,忽然发现,通过cscope已经无法准确定位到一些symbol的位置,新增加的symbol也无

法进行快速的浏览,因为,cscope的数据文件不会自动更新,很长一段时间我都在忍受这种不便

,终于有一次,我要对一些源代码进行大幅度的重构,这次不能再停留在原始社会了,下决心搞

定在,在stackoverflow里边,搜到一个只星半点的方法,链接在这里:
http://stackoverflow.com/questions/2744010/update-cscope-db-from-vim
因为cscope.out的数据文件在被使用的时候是无法更新的,因此我们需要一种方法能够在正常使

用VIM的情况下,自动将cscope的连接终止,这样,我们就可以通过一个服务程序去更新这个文件

,在更新之后能,我们还需要能够在不需要人为干预的情况下,将这个数据文件add回VIM环境。

这就是大体的思路了,这就是stackoverflow里边那个回答的思路,于是按照这个思路往下走,

VIM里边有一个remote和server的工作模式,可以在VIM外边通过remote(VIM实例)发送命令给

server(VIM实例),这为我们在不认为干预的情况下,断开/增加cscope连接提供了可能,于是剩

下的事情就很简单了。

首先,我们需要在VIM里边增加两个函数,我给他们分别定义为KillCscope和AddCscope,第一个

用来断开cscope连接,后一个用来建立cscope连接,代码如下:

function! KillCscope()

cs kill -1

endfunction

function! AddCscope()

cs add cscope.out

endfunction

然后,就可以进行数据库自动更新的代码的实现了,我采用的是windows下的batch,环保实用:

@echo off

title Updating %PROJECT_NAME% cscope database

:loop

cmd /c vim --servername %1 --remote-expr "KillCscope()"

@echo off

call GenCscope.bat

@echo off

cmd /c vim --servername %1 --remote-expr "AddCscope()"

echo sleep 140s

ping -n 140 127.0.0.1 >nul

goto loop

@echo on

这个程序很简单,就是一个无限循环,定时去断开cscope连接,然后更新数据库文件,然后重新

建立连接,其中cmd /c vim --servername %1 --remote-expr "KillCscope()",其实就是发送一

个remote命令给名字为参数%1的server,让其执行KillCscope函数,而GenCscope.bat这个batch

文件就是实现对cscope数据库的更新,这个文件怎么写,我在前边的博文中有提到,而且网上随

便一搜一堆,自己也可以去看cscope的帮助,最后通过ping -n 140 127.0.0.1 >nul实现延时,

延时的长短可以根据个人的习惯来进行调整,因为,在更新数据库的时候,会有一小段时间是无

cscope连接的,所以这个时间不宜设置的过短。

最后,我们需要的只是在什么时候去启动更新脚本了,我map了F11键给这个动作,在我仅是阅读

代码的时候,并不需要进行背景更新,所以,可以通过这个键来实现启动。

这段VIM函数如下:

map <F11> :call UpdateCscope()<CR>

function! UpdateCscope()

silent execute 'AsyncCommand continuous_build' .' '. v:servername

endfunction

其中这里用到了AsyncCommand这个插件,它可以很方便的脱离VIM,调用cmd命令,并且不需要我

们进行额外的按键等操作。

本次的这个主题就这些内容了,希望大家happy vimming
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐