利用ctag+cscope+taglist+Nerdtree打造功能等价于sourceinsight的内核代码阅读神器

  • 注:网络上关于利用ctag+cscope+taglist+Nerdtree打造功能等价于sourceinsight的博文数不胜数,本人这篇博文谈不上锦上添花,更遑论雪中送炭。把这个打造过程记录下来,仅仅只是希望能够为他人提供些许帮助,对我个人而言就已经很开心了。

1. 环境描述

ubuntu16.04 LTS,64操作系统。

2.安装ctag,cscope

$sudo apt-get install ctag cscope

查询ctag和cscope有没有安装成功,可以尝试下面的命令

$cscope  --version

$ctag  --version

3.下载taglist和nerdtree

3.1 确切地说taglist和nerdtree不需要安装,这2个东西其实是vim插件

taglist下载地址(截止到目前有效):https://vim.sourceforge.io/scripts/script.php?script_id=273

taglist下载来后,是一个taglist.vim文件

nerdtree下载地址(截止到目前有效):https://www.vim.org/scripts/script.php?script_id=1658

nerdtree下载来后是一个zip文件,使用命令

$unzip NERD_tree.zip -d yourpath

yourpath是一个由你自己指定的目录,如果此目录不存在会自动创建,比较随意。我自己这样操作

$unzip NERD_tree.zip -d ./NERD

3.2 打开NERD目录可以看到如下目录与文件

$ls ./NERD

autoload   doc   LICENCE      plugin      syntax   CHANGELOG   lib   nerdtree_plugin    README.markdown

4. 配置环境--Ctags

到了这一步,ctag+cscope+taglist+Nerdtree已经全部准备好了。

4.1 检查有没有.vimrc文件和.vim目录

$ls ~/.vimrc

$ls ~/.vim

通常刚刚安装好ubuntu操作系统后,.vimrc文件是存在的,.vim目录是不在的。如果文件或者目录有不存在的清形,自己创建。操作命令如下:

$cd ~

$touch .vimrc  #创建文件

$mkdir .vim  #创建目录

4.2 把3.2中NRED目录的所有东西拷贝到.vim目录下,如果.vim目录下存在与NERD下同名的目录,那么只把同名的目录中的文件copy到.vim中的那个目录去即可

4.3 把3.1下载的taglist.vim放到~/.vim/plugin目录下面

4.4 ctag生成

在内核源代码根目录下执行下面命令(这条命令会花几分钟的时间)

$ctags -R --c++-kinds=+px --fields=+iaS --extra=+q

执行完成后,在源代码根目录下一定能看到一个文件tags,执行命令

$file tags

tags: LaTeX document, ASCII text

输出如上结果。

接下来配置tags的路径,打开文件~/.vimrc

在文件中添加2行

set tags+=/yourpath/tags            #tags文件的绝对路径

let Tlist_Ctags_Cmd = '/usr/bin/ctags'        #ctags命令的路径

注意:ctags的命令路径需要自己查询,查询命令为

$whereis ctags

执行后会打印出ctags的命令路径。

5.  配置环境--Cscope

#!/bin/bash
LNX=/home/youself/linux-2.6.39
cd /     
find  $LNX   \
-path "$LNX/arch/*" ! -path "$LNX/arch/x86*" -prune -o \
-path "$LNX/crypto/*" -prune -o \
-path "$LNX/Documentation/*" -prune -o \
-path "$LNX/firmware/*" -prune -o \
-path "$LNX/net/*" -prune -o \
-path "$LNX/samples/*" -prune -o \
-path "$LNX/scripts*" -prune -o  \
-path "$LNX/security/*" -prune -o \
-path "$LNX/sound/*" -prune -o \
-path "$LNX/tools/*" -prune -o \
-path "$LNX/usr/*" -prune -o \
-path "$LNX/virt/*" -prune -o \
-name "*.[chxsS]" -print >/home/youself/cscope_ctag_db/cscope.files

$sudo chmod 775 youdefinename.sh把上面的脚本保存到一个youdefinename.sh文件中,修改youdefinename.sh文件权限并执行

注意:(1)上面脚本的第二行与最后一行需要适配为自己的路径,第二行为源码路径,最后一行是存放cscope数据库的目录。(2)上面脚本是针对2.6.39源码写的,如果你是其他的版本的内核源码,请适配

$./youdefinename.sh

$ls /home/youself/cscope_ctag_db

可以看到cscope.files。验证文件cscope.files是成功了的,执行命令

$cat cscope.files | head -n 50

看到有东西输出,都是内核源码文件的绝对路径。

在包含cscope.files路径下执行

$cd /home/youself/cscope_ctag_db

$cscope -b -q -k

会生成好几个文件,其中包括cscope.out。还差最后一步了,执行

$cd ~/.vim/plugin

$sudo gedit cscope_maps.vim

在该文件中找到如下几行,并修改成你自己的cscope.out的路径

if filereadable("/home/youself/cscope_ctag_db/cscope.out")
  cs add /home/youself/cscope_ctag_db/cscope.out #add the database pointed to by environment variable
elseif $CSCOPE_DB != ""
  cs add $CSCOPE_DB
endif

到此,ctag+cscope+taglist+Nerdtree打造sourceinsight功能已经完成。剩下的就是如何使用,如何操作了。

6. ctag+cscope+taglist+Nerdtree怎么使用?

待更新

你可能感兴趣的:(Linux,C/C++)