2011年10月6日 星期四

Session : remember the state

想要退出,但是待會回來時,要回 vi 時,要回到原來的狀態。
用 :mksession 命令 :mksession 會把目前得的狀態存在目前目錄下的 Session.vim
等一下開啟 vi 時,加上: vi -S session.vim 就會回到剛剛的狀態。

要是目前目錄已經有Session.vim,會提醒你用 ! 確認 overwrite
:mksession!
或是自己指定 session 檔名: :mksession ~/mysession1.vim

cscope : browsing codes with cscope

cscope 要先建 database,
加上 cscope for vim 的 key mapping 才能動作。

  1. 建立要cscope 處理的檔案列表
  2. 要 cscope 根據列表產生 database

cscope 會依照 cscope..files 的內容 (檔案量列表),
parsing context 產生data base。
如果是 linux kernel,
可以用 find command 找出要的 source file。

以下就是以 ARM 為例子的 shell script: #!/bin/sh find . \ -path "arch/arm/*" -prune \ -o -path "include/asm-*" \ ! -path "include/asm-i386*" -prune \ -o -path "tmp*" -prune \ -o -path "Documentation*" -prune \ -o -path "scripts*" -prune \ -o -path "drivers*" -prune \ -o -name "*.[chxsS]" -print > cscope.files 在 kernel source folder 執行完 script ,會在目錄下產生 cscope.files。


接著產生 database..

在目錄下作 cscope -b -q -k
  1. -b : 產生 database 就好,不用 launch gui
  2. -q : 產生 reverse index,方便 search
  3. -k : kernel mode , 不要對 ./usr/include 作 index


做完以上動作,cscope 的 資料就 OK 了。

下載 cscope for vim 的 keymapping 檔。
cscope_maps.vim

download 到 .vim/plugin/ 下
--- 沒有這個目錄就自己 create 一個。


之後就可以像平常一樣開啟任何一個 source file。
然後.. 在任何變數 , function 按 Ctrl \ + g 到 定義的地方。

Ctrl \ + d 列出這個 function 所有呼叫到的 function,讓你挑選。

Ctrl \ + c 到 call 這個 function 的 code 去。


要回到上一個地方用: Ctrl t
可以用 :cs help列出command.... find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name) c: Find functions calling this function d: Find functions called by this function e: Find this egrep pattern f: Find this file g: Find this definition i: Find files #including this file s: Find this C symbol t: Find assignments to
ref:
  1. http://cscope.sourceforge.net/large_projects.html
  2. http://http://forteallan.pixnet.net/blog/post/24394720-cscope-%5B%E7%80%8F%E8%A6%BD%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%B7%A5%E5%85%B7-built-with-vim%5D"
  3. http://softsmith.blogspot.com/2009/01/vim-cscope-trace.html
  4. http://adrianhuang.blogspot.com/2007/09/trace-code-gvimctagscscope.html

2011年10月5日 星期三

tabs : brows multiple files with tabs

在 vi 的'頭' 顯示一個類似 tabs 的東西,會列出每一個你開啟的 file,
同時可以切換 tabs..

vi -p serial_core.c mxc_uart.c
相關的操作 command: :tabn 下一個 tab

:tabp 上一個 tab

上面的 command 後面還可以加上數字: :tabn 2 後2 個 tab

關掉 tabs (但是檔案還是開著) tabc

ref: http://blog.sriunplugged.com/vi/tab-feature-in-vim/