顯示具有 vim 標籤的文章。 顯示所有文章
顯示具有 vim 標籤的文章。 顯示所有文章

2014年3月25日 星期二

讓 vim 支援 multiple cscope DB

之前發現blog,有幾篇文章是比較熱門的,尤其是這篇(用 vim 有效閱讀 Android framework 程式碼),被點閱的次數還不少。不過看了之前寫的plugin,還是覺得寫得很差,都是可以動就好。

所以前幾天有點時間,就把部分拿來重寫,大致上已經修改完畢。大家可以到multi-cscope-db(github去看看。

安裝的方式跟以往相同,不過建議用 vundle 來管理你的 vim plugin。
我把 goproj.sh 的部分,移動到 vim script 裡面。所以不需這隻 shell。以後只需要在 vim 的 command line 打入

:CSBuild

就可以建立新的 DB 或是更新 DB 內容,相信這樣應該會比較好用些。

目前預設支援:

*.aidl
*.cc
*.h
*.c
*.cpp
*.java
*.py

當加上越多副檔名支援,更新或是新建  DB 的時間就會花比較多。

Fork and enjoy it! :)
歡迎討論!


2010年6月3日 星期四

用 vim 有效閱讀 Android framework 程式碼

Android 發展至今,程式碼的部份不斷的膨脹,越來越大。要整個通透需要花點時間,而這篇文章主要是談論如何利用 vim 來快速閱讀 Android 程式碼,這邊的程式碼包含底層 C , C++ and Java framework 的部份,當然如果你是寫 Application 的人,也許用 Eclipse 會快一點,不過如果你想了解 Android framework 的實作也可以透過下面的方式去瀏覽。

請自我確認一下,如果你有下面幾個症狀,請務必看完這篇文章,應該對你很有幫助。
  1. 如果你還在用 grep 找 key word
  2. 如果你還在開多個 tab 然後下指令,去開某個含有特定 key word 的源碼
  3. 如果你很勤勞的想每個檔案都打開看完,並了解所有 class or object 特性
如果你沒有這樣的症狀,那您可以省下寶貴時間不用看下面的文章。

2009年3月23日 星期一

multi-projects of vim using cscope plugin

我在 Linux 上都是用 vim 在 trace source code,可是以前都是用 grep 的笨方法,並不知道 cscope 這個好東西,他可以直接在 vi 裡面直接連結到 function 的定義或是哪邊的 code 有用到這個 function 。
這像是在 windows 上的 source insight,也許用很多人認為 source insight 非常好用(也許是學習曲線較快),vi 相對來說,就需要花點時間去習慣,不過習慣後,就會討厭在寫 code 的時候要去動到滑鼠。:)

下面的安裝,我做了些改良(cscope_maps.vim),讓 vim 自動尋找正確的 cscope 產生出來的 CSCOPE_DB(通常為 cscope.out ),這邊透過絕對路徑的方式讓 vim 可以在任何子目錄中跳到另外幾個目錄下的某個檔案,原本的機制是不行的。

1. Install cscope and ctags
sudo apt-get install cscope ctags

2. download and modify cscope_maps.vim

這邊預設的目錄深度為 20 層,所以如果你的 source code 的目錄深度大於 20 請自行修正 i 的值
if has("cscope")
......

" add the database pointed to by environment variable 

" Search database for each project, you can switch different projects easily, :)

let i = 1
  while i < 20
    if filereadable("cscope.out")
      let db = getcwd() . "/cscope.out"
      "echo db
      let $CSCOPE_DB = db
      cs add $CSCOPE_DB
      let i = 20
    else
      cd ..
    let i += 1
  endif
endwhile

" show msg when any other cscope db added

.......
3. put cscope_maps.vim into ~/.vim/plugin
(目錄不存在請自行建立)

4. Create goproj.sh and put it in ~/bin
這是為了方便建立 cscope.out (CSCOPE_DB)而寫的 goproj.sh,內容如下,為了方便起見可放在 ~/bin 下面。
Content of goproj.sh
#!/bin/bash
CSCOPE_FILE=cscope.out
if [ -n "$1" ]; then
  echo "Source code directory: " $1
  echo "Create file map : " $CSCOPE_FILE
  find $1 -name "*.h" -o -name "*.c" -o -name "*.cpp" > $CSCOPE_FILE
  cscope -bkq -i $CSCOPE_FILE
  # cscope -Rbkq
  ctags -R
else
  echo "Please key-in path of project"
fi 

5. 使用範例,以 kernel source
# tar zxvf kernel-2.6.29.tar.gz
# cd kernel-2.6.29
# goproj.sh `pwd`
# vim xxx.c


[ Ctrl + \ + s ] : 搜尋游標上的 function 哪邊參考到
[ Ctrl + \ + c ] : 搜尋游標上的 function 哪邊呼叫到
[ Ctrl + \ + g ] : 搜尋游標上的 function 是在哪邊定義的

[ Ctrl + \ + t ] : 跳回下一個位置
[ Ctrl + \ + o ] : 跳回上一個位置

另外由於 cscope_maps.vim 中有定義 Ctrl + ] 的作用,會取代原本 TAG 裡面的定義,所以如果不喜歡的話可以把 cscope_maps.vim 中的這行 (set cscopetag) 移除 。

6. 請用力使用。謝謝!