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/

2011年6月21日 星期二

重新排版 - indent

重新排版功能

1. 先把要重新縮排的區域 Mark 起來
2. 啟動重新縮排

ref : 這一篇 重排所有內容

0 到行首

gg 到檔案開頭

V 進入 visual mode

G 到檔案最後 (就會 mark 到檔案最後)

= 重新縮排 mark 的區域

2011年6月8日 星期三

2011年3月21日 星期一

go to shell, temporary

暫時退出vi,開啟shell
Ctrl-z

這樣就會保留 vi 的 edit sesstion,暫時回到 shell。

當執行玩 shell command 後,用:
$fg
加上 enter

這樣就會回到剛剛的 vi 畫面了。




這樣看來,Ctrl-Z 就跟一般的console一樣,是把vi 放到background..

2011年1月12日 星期三

multiple windows

ref: http://www.cs.swarthmore.edu/help/vim/windows.html

新增一個 垂直的 windows,開啟一個檔案:
: vsplit file

水平的話就用 split。
* vsplit 可以用 vsp 代,split 可以用 sp 代

到另一個 windows (這跟用 diff 時一樣)
Ctrl-W W


關閉這個 window
: hide

好像用 :bd 也可以。


好像有一整組用 Ctrl-W 的 Windows 操作。 ref: http://selinap.com/2009/07/how-to-use-multiple-windows-in-vim/

都是以 Ctrl-W 開始:

開啟,關閉:
  • close window
  • v : split vertically
  • s : split horizontally
移動 cursor:
  • l : 移動 cursor 到右邊的 window
  • h : 移動cursor 到左邊window
  • j : 移動到上面window
  • k: 移動到下面 window
window size 調整:
  • + : windows size 增加一行 (horizontal 時有效)
  • - : windows size 減一行
  • > : 增加size (vertical 時有效)
  • < : 減少size.