如何在vim中輕鬆閱讀程式碼
阿新 • • 發佈:2019-02-07
有時候在vim中閱讀程式碼十分的方便,特別是閱讀c/c++程式碼。通過一定的配置,可以使vim具有ide的閱讀體驗。
安裝ctags和cscope
第一步安裝vim需要的工具。ctags和cscope這是兩個古老而又強大的為程式碼建立索引的工具,在redhat系列的linux系統下(例如:redhat,centos,fedra等)安裝非常方便。
sudo yum install ctags
sudo yum install cscope
若還有問題,可以在網上查一下,一般都能解決。
建立自己的外掛函式
建立一些常用的外掛函式方便以後的對映。這些函式包括:檢視函式定義,檢視函式呼叫情況,查詢字串出現的地方,等等。下面我們就來建立這樣的檔案:
在/home/username/下建立一個資料夾 .vim/plugins 或 .vim/plugin(vim的版本不同,目錄不同,一般是在.vim/plugin下),注意:是在使用者的home目錄下進行建立,而且是隱藏資料夾。
cs_search_string.vim
該檔案的內容如下:
"cs search word
func CS_Search_Word()
let w = expand("<cword>")
exe "cs f s" w
exe "copen"
endfunc
" find the define
func CS_Search_define()
let w = expand("<cword>")
exe "cs f g" w
exe "copen"
endfunc
" find call what funcs
func CS_Search_whatfunc()
let w = expand(" <cword>")
exe "cs f d" w
endfunc
" find called func
func CS_Search_calledfunc()
let w = expand("<cword>")
exe "cs f c" w
endfunc
" find where file the func is
func CS_Search_funcfiles()
let w = expand("<cword>")
exe "cs f i" w
endfunc
search_word.vim
"search word
func Search_Word()
let w = expand(" <cword>")
exe "vimgrep" w "./**/*.c ./**/*.h"
exe "copen"
endfunc
建立.vimrc檔案
在使用者自己的home目錄下建立自己的.vimrc檔案。注意,以下檔案是我的配置,你可以修改成你的配置,我在相關的對映上都加上了註釋。該檔案的內容如下:
set nu
set tabstop=4
set et
set fo-=r
set noautoindent
syntax on
" 把游標放到一個函式上,按f5就可以開啟該函式的定義視窗
map <F5> <C-w>]
" 按f6關閉定義視窗
map <F6> <C-w>c
" 按f4可以檢視括號的匹配
map <F4> <S-%>
" 在插入模式下輸入zz,即可退出編輯狀態
imap zz <Esc>
set sw=4
"map <F2> :s/$/\= strftime(" %Y-%m-%d %H:%M:%S")<Enter>
" 在游標所在行的末尾插入日期,這個可以按自己的需要去留
map <F2> :s/$/\= strftime(" %Y-%m-%d")<Enter>
" 在專案級別查詢單詞所在的地方,並彈出視窗
map <F9> :call Search_Word()<CR>
" 按<檢視前一項內容
map < :cprevious<CR>
" 按>檢視後一項內容
map > :cnext<CR>
" 只是檢視函式被呼叫的地方,而不是字串搜素
map <F7> :call CS_Search_Word()<CR>
" 關閉彈出視窗
map <F8> :cclose<CR>
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("./cscope.out")
cs add ./cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
"if $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif
set cscopequickfix=e-,i-,s-,t-
" 檢視函式被呼叫的地方
map <F11> :call CS_Search_calledfunc()<CR>
" 檢視函式定義
map <F12> :call CS_Search_whatfunc()<CR>
hi Comment ctermfg=6
set nocompatible
"filetype indent on
"set autoindent
"set ic
set hls
"set lbr
colorscheme delek
建立建立索引命令
需要建立索引時可以通過ctags命令和cscope命令單獨建立,我這裡自己寫了一個指令碼,用起來比較方便。該指令碼叫:ctcs。指令碼建立完成後,把指令碼放到/usr/local/bin/下即可。
#!/bin/bash
#
# ctcs
star()
{
ctags -R *
if [ $? -eq 0 ]; then
echo "ctags successfully!"
fi
cscope -qbR
if [ $? -eq 0 ]; then
echo "cscope successfully!"
fi
}
del()
{
if [ -f tags -o -f cscope.out -o -f cscope.po.out -o -f cscope.in.out ]; then
rm -f tags && echo "clean tags ok!"
rm -f cscope.* && echo "clean cscope.* files ok!"
fi
}
case "$1" in
-r)
del
star
;;
-d)
del
;;
*)
echo "usage : ctcs -r|-d"
exit 1
esac
exit 0
如何使用
(1) 進入專案原始碼根目錄
(2) 執行ctcs -r命令
(3) vim xxx.c
(4) 把游標放到一個函式上,按f7試一試,是否能看到函式被呼叫的列表
$ cd redis-4.0.1
$ ctcs -r
$ vim src/server.c