前言:
通常情况下,使用SourceInsight跳转源码函数调用比较方便,但有的时候用到vim,vim功能很强大,但却不能进行函数跳转,需要借助cscope或者ctags。
安装ctags和cscopes:
sudo apt install ctags
sudo apt install cscope
生成数据库文件:
ctags执行选项:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q --exclude=pattern
–c++-kinds: 用于指定C++语言的tags记录类型, –c-kinds用于指定c语言的, 通用格式是 –{language}
–fileds: 用于指定每条标记的扩展字段域
–extra: 选项用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目
–exclude: 在创建ctags的时候排除某些目录
vim ctag_cscope_db.sh
#! /bin/bash
echo "正在生成tags文件"
/usr/bin/ctags -R --fields=+lS .
if [[ $? == 0 ]]; then
echo "生成tags文件成功"
echo "$(readlink -f tags)"
else
echo "生成tags文件失败"
fi
echo "正在生成cscope.out"
find . \
-name "out" -prune \
-o -iname "*.s" -o -iname "*.h" \
-o -iname "*.c" -o -name "*.cc" \
-o -iname "*.cpp" -o -iname "*.cxx" \
| sed -n "s%^\.%$PWD%p" \
> cscope.files
/usr/bin/cscope -Rbq
if [[ $? == 0 ]]; then
echo "生成cscope.out成功"
echo "$(readlink -f cscope.out)"
else
echo "生成cscope.out失败"
fi
在Android源码顶层目录执行后生成cscope.files、 cscope.in.out、 cscope.out、 cscope.po.out、 tags
Ctrl+] //跳转到所有调用此函数的地方,以及定义的地方
Ctrl+t //回退
配置/etc/vim/vimrc:
第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,
就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
set tags=tags; set autochdir
子目录使用cscope跳转
function! LoadCscope() let db = findfile("cscope.out", ".;") if (!empty(db)) let path = strpart(db, 0, match(db, "/cscope.out$")) set nocscopeverbose " suppress 'duplicate connection' error exe "cs add " . db . " " . path set cscopeverbose " else add the database pointed to by environment variable elseif $CSCOPE_DB != "" cs add $CSCOPE_DB endif endfunction au BufEnter /* call LoadCscope()
如果想要使用Taglist。(选配)
安装taglist
从https://sourceforge.net/projects/vim-taglist/files/下载taglist安装包。
进入/etc/vim/目录,将taglist安装包解压,将解压后的/doc和/plugin目录复制到该目录下
vim vimrc(下面的单引号表示注释,如果想改变配置,将相应”去掉)
"设置taglist打开关闭的快捷键F8 nnoremap <silent> <F8> :TlistToggle<CR> filetype plugin indent on let Tlist_Inc_Winwidth = 1 let Tlist_Auto_Highlight_Tag = 1 let Tlist_Highlight_Tag_On_BufEnter = 1 "设置ctags路径 let Tlist_Ctags_Cmd = '/usr/bin/ctags' "启动vim后自动打开taglist窗口 let Tlist_Auto_Open = 1 "不同时显示多个文件的tag,仅显示一个 let Tlist_Show_One_File = 0 "taglist为最后一个窗口时,退出vim let Tlist_Exit_OnlyWindow = 1 "taglist窗口显示在右侧,缺省为左侧 "let Tlist_Use_Right_Window =1 "设置taglist窗口大小 "let Tlist_WinHeight = 100 "let Tlist_WinWidth = 40 "设置taglist打开关闭的快捷键F8 noremap <F8> :TlistToggle<CR> "更新ctags标签文件快捷键设置 noremap <F6> :!ctags -R<CR>
5. vim一般配置(选配)
:set nocompatible "VIM而不是VI
:set history=50 "历史记录50条
:set fenc=utf-8 "设置默认语言为8位unicode
:set hls "查找文本高亮
:set ruler "显示当前位置
:set autoindent "自动缩进
:set smartindent "智能缩进
:set cindent "缩进
:set tabstop=4 "硬TAB
:set softtabstop=4 "软TAB
:set shiftwidth=4 "缩进空格数
:set expandtab "空格替换TAB
:set smarttab "智能TAB
:set showmatch "显示匹配
:set matchtime=5 "1/10秒延迟
:set hlsearch "高亮搜索
:set incsearch "搜索中匹配
:set tags=tags; "ctags
:set autochdir "ctags
filetype on "打开文件类型检测
colorscheme delek "主题
"colorscheme evening "主题
syntax on "语法高亮
转载请注明出处:http://www.wolfnx.com/2018/12/19/AndroidSourceUseCscope
作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com