多学点东西,再写写自己的收获,和大家共分享。 这样对linux都有贡献。。。。

vim编程时自动设置tags

上一篇 / 下一篇  2007-09-06 06:21:46 / 个人分类:linux 工具使用


说明:适用于linux+vim7.0. 如果是windows是可做修改才能用的。

在默认情况下vim 的tags属性是
           ./tags,./TAGS,tags,TAGS
很显然vim只会在当前目录下找tags.
但是我们的程序代码分布是树状结构,如
project
    |  src
         | ai
         | ui
         ......
    |  include
     
我们一般会在project 目录下生成 tags
   生成命令一般是:ctags -R  --languages=c++ --c++-kinds=+p --fields=+iaS --extra=+q .
   在project下打开文件没有问题,tags能用。
   但是如果在ai下打开其中的文件,那project下的那个tags,就不能用了。除非我们把它加入。
       你大可以在vim 执行: set tags=..... ... /project/tags
   现在给出一个更好方案。
   打开任何文件,自然地将打开的文件所在目录路径上查找tags. 如果有则加入 。
   如果 现在打开了 /home/xxx/project/src/ai/a.c, project下有tags
    将查找  /home/xxx/project/src/ai/  下是否有tags ,没有!
    将查找  /home/xxx/project/src/        下是否有tags ,没有!
    将查找  /home/xxx/project/                下是否有tags ,有,加入
    将查找  /home/xxx/                                 下是否有tags ,没有!
    将查找  /home/                                         下是否有tags ,没有!
    将查找  /                                                    下是否有tags ,没有!
   则最后 tags=./tags,./TAGS,tags,TAGS,/home/xxx/project/tags
  就是实现的效果。

那以下代码copy到 ~/.vimrc .  (没有就建一个)

    

"------------------------------------------------------------------------------
"获取当前路径的上一级的路径
function! GET_UP_PATH(dir)
    let pos=len(a:dir)-1
    while pos>0
        if (a:dir[pos]=="/" )
            return  strpart(a:dir,0,pos)
        endif
        let pos=pos-1
    endwhile
    return  ""
endfunction

"设置相关tags
function! s:SET_TAGS()
    let dir = expand("%:p:h") "获得源文件路径
    "在路径上递归向上查找tags文件
    while dir!=""
        if findfile("tags",dir ) !=""
            "找到了就加入到tags
            exec "set tags+=" . dir . "/tags"
        endif
        "得到上级路径
        let dir=GET_UP_PATH(dir)
    endwhile
endfunction

autocmd BufEnter * call s:SET_TAGS()
"------------------------------------------------------------------------------


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-08-22  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 16418
  • 日志数: 43
  • 图片数: 3
  • 文件数: 3
  • 书签数: 16777215
  • 建立时间: 2007-01-29
  • 更新时间: 2008-08-02

RSS订阅

Open Toolbar