vim看代码的工程配置

Android开发,重点在kernel、bootloader、system等。每天有大量的代码要看,分散在很多目录下。


核心思路:

1. 使用数据库缓存,加速常用操作。
2. 在vim中根据环境变量加载相应工程的各种符号数据库。


 1,自定义shell命令,准备工程的环境变量。
本地有多个代码目录,需要切换工程,可将如下语句添加到.bashrc中,路径自定义,命令名称自定义。这些环境变量,主要是给vim准备的。
alias cdsyn="export PRJTOP=~/code1/share/MT_SYNC ; export TAGTOP=~/code1/share/MT_SYNC/tags ; cd ~/code1/share/MT_SYNC ; mkdir -p tags ; source build/envsetup.sh; source ~/.bashrc.loc"
.bashrc.loc只有一句话,自定义了一个快速查找文件的命令。
alias loc="locate -d $TAGTOP/.dirlocate.db"


2,为工程创建数据库
随便把脚本放到一个目录下,然后设置PATH。比如我放在~/code1/bin/下。
使用自定义cd命令(如cdsyn)进入到工程中。udb $(pwd)。完整的更新大概十几分钟就完成了。
我使用crontab -e,添加如下代码,让电脑每天凌晨时自动更新数据库。记得sudo service cron restart
0 0 * * * /home/liu/code1/bin/udb-repo /home/liu/code1/share/MT_SYNC
#!/bin/bash

if [ $# != 1 ]
then
    echo "udb <path>"
    exit -1
fi

PWD=$(pwd)
export PRJTOP=$1
export TAGTOP=$PRJTOP/tags
SRCLIST="build system kernel-3.10 device vendor bootable bionic external/libselinux"

cd $PRJTOP

mkdir -p $TAGTOP

#update locate db
echo "v" | sudo -S updatedb --prunepaths $PRJTOP/.repo -U $PRJTOP -o $TAGTOP/.dirlocate.db 2>/dev/null > $TAGTOP/log

#update ctags db
for src in $SRCLIST
do
        cd $PRJTOP/$src
        ctags -aR --tag-relative -f $TAGTOP/tags 2>/dev/null >> $TAGTOP/log
done

#update filelist
find $PRJTOP -wholename $PRJTOP/out -prune -o -wholename $PRJTOP/.repo -prune -o -type f 2>/dev/null > $TAGTOP/filelist
find $PRJTOP -name "*" -type d > $TAGTOP/dirlist
echo "!_TAG_FILE_SORTED        2       /2=foldcase/" > $TAGTOP/filenametags
for src in $SRCLIST
do
        cd $PRJTOP/$src
        find $PRJTOP/$src -type f -printf "%f\t%p\t1\n"  2>/dev/null | sort -f >> $TAGTOP/filenametags
done

#update cscope db
for src in $SRCLIST
do
        cd $PRJTOP/$src
        cscope -Rbqk -P $PRJTOP/$src  2>/dev/null >> $TAGTOP/log
done

cd $PWD


有的数据库是整个工程的,有的只索引部分目录。需要修改脚本,指定代码文件夹。
1)locate db。在工程的几十万个文件中中找一个文件,只需要几秒钟。配合.bashrc.loc用。比如loc factory_init.rc。
2)ctags db。vim中向下查函数和变量的代码。ctags和cscsope网上很多资料,不详细说了。
3)cscope db。vim中向上找谁掉了这个函数。
4)filelist。也是用来找文件的,但配合grep,可以更精细。比如这条命令,在sepolicy相关.te类型文件中找factory字符串。在selinux开发中,这个数据库帮了我大忙。
grep "sepolicy" tags/filelist | grep ".*.te$" | xargs grep factory
5)lookupfile db。在vim中找文件。http://easwy.com/blog/archives/advanced-vim-skills-lookupfile-plugin/


3. 配置vim的环境变量
如果你有在Android众多目录下频繁切换文件夹,为频繁设置tags路径烦恼,那么这段内容你一定很感兴趣。
核心点:在vimrc中可以使用shell的环境变量。你应该还记得,在cdsyn时,已经将工程环境变量导入到shell中了。
" ctags, 可以集中放在一个目录下。
set tags=$TAGTOP/tags
" cscope, 没办法,只能放在各自代码文件夹下,逐个添加。
:cs add $PRJTOP/kernel-3.10/cscope.out $PRJTOP/kernel-3.10 
:cs add $PRJTOP/system/cscope.out $PRJTOP/system 
:cs add $PRJTOP/vendor/cscope.out $PRJTOP/vendor 
:cs add $PRJTOP/bootable/cscope.out $PRJTOP/bootable 
:cs add $PRJTOP/device/cscope.out $PRJTOP/device 
:cs add $PRJTOP/bionic/cscope.out $PRJTOP/bionic
" Lookup file的数据库路径
let g:LookupFile_TagExpr = printf('"%s/tags/filenametags"',$PRJTOP)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值