Apr 27, 2010

auto-update tags

工作後,大部份的時間都在 windows 上 Coding,問了蠻多人,大多在 Windows 上寫Coding的人,大多是用 Source Insigne、Ultra Edit。自已本身是用Source Insigne一開始使用就有種,無痛上手的感覺,使用起來,完全沒有門檻,當然也試過 Vim + winCtags,光是要想辨法建tags,就搞了好久,後來就直接放棄。
而自已本身大多還是習慣在Linux的環境下,不外呼,vim + ctags + cscope + Tlist + ........ ,在這多種組合下,用的還算順手,但對於 tag 的 auto update,一直到最近才找到如何處理。

可以利用下面的 vim function,當存檔時,會自助幫你執行 append 新的 tag,但沒辨法利用 set tags 的變數來決定我 tags的位置,目前是直接放棄這個方式。
function! UPDATE_TAGS()
let _f_ = expand("%:p")
let _cmd_ = '"ctags -a -f /dvr/tags --c++-kinds=+p --fields=+iaS --extra=+q " ' . '"' . _f_ . '"'
let _resp = system(_cmd_)
unlet _cmd_
unlet _f_
unlet _resp
endfunction
autocmd BufWritePost *.cpp,*.h,*.c call UPDATE_TAGS()

AutoTag主要是提供一支 autotags.vim的plugin,使用方法很簡單,只要將此plugin放入你.vim/plugin內就可以,而它是使用python來implement auto update的功能,這對只會寫 python 看不懂 vim script在做什麼的我,因該也算是一種好處吧 ,哈哈。

今天,為了試看看,autotags.vim用在大型 project 速度上怎樣,我拿 linux kernel 2.6.31 來測試,做出來的 tags 約 85MB (arch/下只剩 powerpc的目錄),我隨便開啟一個檔案,編輯後存檔,大約花了 5 秒做 auto update的動作(CPU是C2D E6600 @ 2.4G),雖然花了5秒,但沒想像中的那麼慢,或許之後,可以思考如何去切而不是整個都包到同一個 tags 內。

在autotags.vim裡,有一個變數 __maxTagsFileSize 用來限定,tags的大小,預設是 7MB,如果你的 tags 超過這個大小,會直接放棄 update 的動作,當然,可以手動把它設大一點 :)。

除了 ctags,cscope也是一個很好用的 source browsing,支援比ctags更多的功能,但它的 cscope.out ,好像不支援 append 的功能,如要更新,要全部重做一次。Automatically create and update cscope database提供了一組 Hot-Key,來幫忙不用退出vim,"一指"完成。
Hot-Key如下:
nmap :!find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files
\ :!cscope -b -i cscope.files -f cscope.out
\ :cs reset

2 comments:

Anonymous said...

Excellent post I must say.. Simple but yet interesting and engaging.. Keep up the awesome work!

clomid

Binggo said...

PAPISLOT hadir di Indonesia menjadi salah satu agen judi slot terpercaya yang memiliki izin resmi dari pemegang lisensi game online Internasional PACGOR di Philippine , PAPISLOT memiliki berbagai macam permainan judi online yang resmi juga, dan pastinya menjadi favorit oleh sebagian besar pemain judi di Indonesia. Permainan judi online24jam yang bisa anda dapatkan di situs PAPISLOT antara lain adalah agen judi bola, judi casino online, poker online, slot online, sampai tembak ikan dan arcade mini games. Bermain di PAPISLOT sangatlah mudah karena telah mengaplikasi sistem 1 ID untuk semua permainan di situs kami. Jadi anda tidak perlu repot-repot melakukan konfirmasi perpindahan dana permainan ke customer service. Dan hal positif lainnya adalah anda bisa bermain game judi online secara mudah, efektif dan cepat. Kami selalu mengutamakan kepuasan para pemain kami terutama dalam hal topup deposit maupun withdraw, kami memiliki standard proses deposit dan withdraw tidak lebih dari 5 menit sehingga anda bisa secara puas bermain di meja judi situs PAPISLOT.