Windows下的VIM – 如何自動在後台更新cscope資料庫檔案

來源:互聯網
上載者:User

以前老是要退出 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.