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

2009年11月17日 星期二

Trace Code with vim, ctags, cscope, taglist

在 console 下沒有 sourceinsight 的強大 reference, Class relation 圖的功能好用,但是加上 ctagscscope 可以達到部份的功能,主要是差在沒有 Class relation 之類的關係圖。

cd ~linux; ctag -R *; cscope -bR

cscope 沒有加 -b 預設會進入互動模式 CTRL-d 離開,如果要看 kernel 或是 standard library 本身的程式碼,可加 -k

cscope -bkR

減少不必要的 standard inclusion

linux-2.6.31.5 的 source code 建的 index 差異是 ctags 的 tags

119,529,496 bytes cscope 的 cscope.out 227,247,709 bytes,約多出一倍

100MB的索引資料。其實在 linux kernel 解開後下 make help 也可以看到

make tags, make cscope 兩種分別建立 ctags 與 cscope 資料檔案的方式。

再抓以下檔案

http://cscope.sourceforge.net/cscope_maps.vim

到 ~/.vim/plugin,這個 cscope 設定檔會覆蓋 ctags 預設讀取的 tags 檔,ctags 裡跳到定義的 Ctrl + ] 改為讀取 cscope.out 檔案,而非 tags 檔案

(Ctrl + t 或 Ctrl + o 退回原游標,Ctrl + i 到下一遊標)。

如果還是習慣有 ctags 的操作,可以在 ~/.vimrc 加上

" tags search path

set tags=tags,../tags,../../tags,../../../tags

另外把 cscope_maps.vim 裡面的 set cscopetag 加上 comment "

cscope 本身的功能鍵是:

Ctrl + \ + s 尋找使用目前游標 symbol 的 references
Ctrl + \ + g 尋找使用目前游標 symbol 的 global 定義
Ctrl + \ + c 尋找所有 call 到目前游標 function的 callers
Ctrl + \ + d 尋找目前游標 function的呼叫的所有 callees
Ctrl + \ + f 開啟目前游標所在的 include 檔
Ctrl + \ + t 尋找所有目前游標所在 instance/object 的 users
Ctrl + \ + e egrep 搜尋目前游標所在名稱
Ctrl + \ + i 尋找所有 include 目前游標檔名的所有 includers

搜尋完的結果頁可以使用 Enter 下一行, Spacebar 下一頁, q 離開,另外是同樣功能搜尋,但視窗切為水平/垂直兩種。連續兩次 Ctrl+ Space 鍵的切換,一般中文使用者會跟中文切換衝到,需要再修改 cscop_maps.vim

可以看 用 vim+scope linux kernel

Kernel Newbies 的 Kernel Hacking Tools 提到在沒有使用 vim 搜尋時的命令列搜尋方式:

find . -exec grep --with-filename myfunction '{}' \;
find . -name '*.[chS]' | xargs egrep -n "myregularexpression";
egrep -r --include "*.[chS]" "myregularexpression" .

另一個好用的 script 是 taglist plugin, :tlistopen 就可以開啟側邊,關於目前檔案的 tag list。也是用 Ctrl + w + {h,j,k,l} 移動。taglist 是倚賴 ctags 達成的 plugin.

為了方便使用我在 vimrc 也加入Tlist_File_Fold_Auto_Close 在我們切換到不同檔案時,自動關閉游標已離開 focus 的視窗。參考 c9s連結,及 TagList Manual 後加入 TagList 快速鍵 F8 設定切換開啟或關閉 TagList,並加入 Tlist_Exit_OnlyWindow 在只剩 TagList 視窗時自動關閉 Vim.

" TagList settings
let Tlist_File_Fold_Auto_Close = 1
" let Tlist_Auto_Open = 1
nnoremap :TlistToggle
let Tlist_Exit_OnlyWindow = 1

參考文獻:
  1. vim and linux Coding Style
  2. 用 vim+scope 看 linux kernel
  3. Vim/Cscope Tutorial
  4. vim source navigator use taglist
  5. vim taglist plugin manual taglist manual
  6. vim taglist download config and plugin for vim
  7. Setting up Ctags+Gvim in windows Taglist 快速鍵
  8. 打造自己的VIM:源碼追蹤(ctags+cscope)及預覽視窗SrcExpl
  9. vim script ratings

2009年2月10日 星期二

Windows gvim rc 與 Ubuntu 下的 vimrc 設定

新加一些自己需要的修改放在 ~\Program Files\Vim\_vimrc 裡


syntax on
set autoindent
" fonts 參數可以先在 GUI 編輯->設定字型後下 set gfn? 指令取得
set guifont=DFKai\-SB:h14:cCHINESEBIG5

" color patterns, 可以參考
" http://code.google.com/p/vimcolorschemetest/ 底下
" browse by file type 的部份取得 sample 檔,放在
" ~\Program Files\Vim\vimfiles\colors 中, 如 torte.vim 就是
colorscheme torte

set background=dark

" 256 colors
set t_Co=256

"initial window size
winpos 0 0
set columns=120
set textwidth=118
set lines=31
"or replace the above with the following for fullscreen
au GUIEnter * simalt ~x

"#按一次 Tab 縮四個空格
set tabstop=4

"#自動縮排時,一次縮四個空格
set shiftwidth=4

"#將 Tab 轉成空格
set expandtab

"#不顯示@
set display=lastline

"highlight for current search match
set incsearch

" tags search path
set tags=tags,../tags,../../tags,../../../tags

"keep columns when rows changed
set nosol

"搜尋時不管大小寫
set ignorecase
"當有大寫時才管大小寫
set smartcase

"help avoid hi-enter prompt
set cmdheight=1

"always have status line
set laststatus=2

" No backup files for gvim under windows
" set nobackup
" set nowritebackup
set noswapfile


Ubuntu 下的 vimrc 設定檔


set nocompatible

set history=800 " vim history buffer lines
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1

" indent code differently based on file type
filetype plugin on
filetype indent on

set t_Co=256
syntax on

" Set to auto read when a file is changed from the outside
set autoread

"#按一次 Tab 縮四個空格
set tabstop=4

"#自動縮排時,一次縮四個空格
set shiftwidth=4

"#將 Tab 轉成空格
set expandtab

"#不顯示@
set display=lastline

"highlight for current search match
set incsearch
"highlight all matches for the pattern
set tags=tags,../tags,../../tags,../../../tags,../../../../tags,/home/sshuang/.vim/tags/tags,/usr/include/tags

" 顯示第幾列
set number

" 檢查拼字
"set spell
" 檢查拼字語系
"set spelllang=en

"keep columns when rows changed
set nosol

set autoindent smartindent "auto and smart indent
set smarttab "make and smarter
set backspace=eol,start,indent " allow backspacing over indent, eol, & start

" http://www.jukie.net/~bart/blog/vim-and-linux-coding-style, need fix!
" For Linux kernel specific highlighting
"syn match ErrorLeadSpace /^ \+/ " highlight any leading spaces
"syn match ErrorTailSpace / \+$/ " highlight any trailing spaces
"match Error80 /\%>80v.\+/ " highlight anything past 80 in red

"搜尋時不管大小寫
set ignorecase
"當有大寫時才管大小寫
set smartcase

"help avoid hi-enter prompt
set cmdheight=1

"always have status line
set laststatus=2

"在 vim 使用滑鼠
"set mouse=a

" Enrich status line, from
" http://www.packtpub.com/article/personalizing-vim?utm_source=rb_vim7.2_abr4_0510&utm_medium=content&utm_campaign=rahul
:set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\[HEX=\%02.2B]\ [POS=%04l,%04v]\ [%p%%]\ [LEN=%L]

" No backup files for gvim,
" http://thehumblecoder.wordpress.com/2006/08/08/vim-swap-and-backup-files/
" set nobackup
" set nowritebackup
" set noswapfile

" color files in ~/.vim/colors/railscasts.vim
colorscheme railscasts

" TagList settings,
" http://c9s.blogspot.com/2007/07/setting-up-ctags-gvim-in-windows.html
" http://vim-taglist.sourceforge.net/manual.html
let Tlist_File_Fold_Auto_Close = 1
let Tlist_Exit_OnlyWindow = 1
" let Tlist_Auto_Open = 1


nnoremap :TlistToggle


" 方便在 terminal 剪貼 windows/browsers 文字檔,保持排版
nnoremap :set paste


" 恢復 indent

nnoremap :set nopaste


" include path for standard include directories and files
set path+=/usr/include

" from http://janitor.kernelnewbies.org/ suggestions to edit linux kernel
" codes and dealing with patches
set backupcopy=auto,breakhardlink
map ^iSigned-off-by: Sheng Jih Huang ^
map! Signed-off-by: Sheng Jih Huang
let c_space_errors=1
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/

" ===============
" GUI Settings, gvim specific settings
" ===============
if has("gui_running")
"execute gui-only commands here.
" set height of window for your (17" LCD) Monitor
set clipboard=unnamed
set guioptions=amrb
else
endif

" vim in different OS
" or use :help 'some settings'
if has("win16") || has("win32") || has("win64")|| has("win95")
"always use gui vim in windows?
if has("gui_running")
"execute gui-only commands here.
"initial window size
winpos 0 0
set columns=120
set textwidth=118
set lines=31
"or replace the above with the following for fullscreen
au GUIEnter * simalt ~x
endif
" do windows things here
elseif has("unix")
" do linux/unix things here
endif

" from grep.vim
" You can map a key to invoke any of the above commands. For example, the
" following map invokes the :Grep command to search for the keyword under the
" cursor:
nnoremap :Grep


相關連結:

gvim

vim document:gui win32

vimrc 常用設定(問答)

Sample .gvimrc

gvim 設定

vim 的設定與一些快捷鍵

vim color scheme test

vim swap and backup files

https://github.com/vgod/vimrc

The ultimate Vim configuration - vimrc

The perfect .vimrc vim config file | Steve Francia's Blog