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
在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
相关文章推荐
- WINDOWS脚本(备份数据库+FTP上传+自动删除7天前文件)
- Win10系统如何关闭Windows自动更新给系统打补丁
- spring boot 自动更新静态文件和后台代码
- windows系统利用批处理文件自动备份数据库及文件
- 如何读取配置文件并连接后台数据库,且对数据库进行操作实例(查询或修改等)
- 【Unity3d】自动版本构建: 如何在Windows平台下自动打开资源管理器并且选中指定文件
- 如何设置使windows(dos)命令中目录和文件可以自动完成和补齐
- Windows下用Cygwin,VIM搭建Mainframe开发环境(九)---更强的文件浏览和自动完成
- sql优化:从设计表结构开始(SQL Server中如何让数据库中某一个字段随时间自动更新?)
- 如何在C#中用程序执行指定的SQL脚本文件,实现自动安装创建数据库
- Windows下Oracle 9i数据库文件的自动备份。
- 详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库
- 如何设置使windows(dos)命令中目录和文件可以自动完成和补齐
- VIM编辑文件时如何不自动生成以波浪线(~)为结尾的文件
- windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊?
- 自动备份网站文件和数据库上传到FTP空间(10月7日更新)
- C# 利用FTP自动下载xml文件后利用 FileSystemWatcher 监控目录下文件变化并自动更新数据库
- web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份
- 如何实现xslt文件中节点属性的自动更新
- 如何在Windows系统上运行编写的java文件_更新dos命令设置path