vi 函数跳转

Ctrl + T 返回
Ctrl + O 返回
Ctrl + ] 跳到光标所在函数或者结构体的定义处
Ctrl + W + ] 分割当前窗口,并且跳转到光标下的tag

yum  install  -y  ctags

# 系统函数
# 笼统版(会生成很多杂项)
ctags-R --languages=c++ --langmap=c++:+.inl -h +.inl --c++-kinds=+px--fields=+aiKSz --extra=+q --exclude=lex.yy.cc --exclude=copy_lex.yy.cc

# 干净版  (最后是自定义想添加路径,可以如: ...opencv/include/ )
ctags -R -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ \
--languages=c,c++ --langmap=c++:+.inl -h +.inl --c++-kinds=+px --fields=+aiKSz --extra=+q --exclude=lex.yy.cc --exclude=copy_lex.yy.cc \
-f ~/.systags /usr/include/* /usr/include/sys/* /usr/include/bits/*  /usr/include/netinet/* /usr/include/arpa/* /usr/include/mysql/*

# -R
#表示扫描当前目录及所有子目录(递归向下)中的源文件。并不是所有文件ctags都会扫描,如果用户没有特别指明,则ctags根据文件的扩展名来决定是否要扫描该文件——如果ctags可以根据文件的扩展名可以判断出该文件所使用的语言,则ctags会扫描该文件。

# --languages=c++
# 只扫描文件内容判定为c++的文件——即ctags观察文件扩展名,如果扩展名对应c++,则扫描该文件。反之如果某个文件叫aaa.py(Python文件),则该文件不会被扫描。

# --langmap=c++:+.inl
# 告知ctags,以inl为扩展名的文件是c++语言写的,在加之上述2中的选项,即要求ctags以c++语法扫描以inl为扩展名的文件。

# -h +.inl
# 告知ctags,把以inl为扩展名的文件看作是头文件的一种(inl文件中放的是inline函数的定义,本来就是为了被include的)。这样ctags在扫描inl文件时,就算里面有static的全局变量,ctags在记录时也不会标明说该变量是局限于本文件的。

# --c++-kinds=+px
# 记录类型为函数声明和前向声明的语法元素。

# --fields=+aiKSz
# i表示如果有继承,则标识出父类; a表示如果元素是类成员的话,要标明其调用权限(即是public还是private); S表示如果是函数,则标识函数的signature。

# --extra=+q
# 让ctags额外记录一些东西(见第四、五节)。

# --exclude=lex.yy.cc --exclude=copy_lex.yy.cc
# 告知ctags不要扫描名字是这样的文件。还可以控制ctags不要扫描指定目录,这里就不细说了。

# -f tagfile
# 指定生成的标签文件名,默认是tags. tagfile指定为 - 的话,输出到标准输出。

在你要编辑的源码目录下: ctags -R
最后配置
vim ~/.vimrc
set tags +=./tags
set tags += /…/xxx_tags
source ~/.vimrc

你可能感兴趣的:(linux,ctags)