这两天看 BOINC 的代码,需要 find usage 的功能。花了一上午,摸索出了让 vim 自动加载生成的 cscope.out 的方法。

在 .vimrc 中插入如下代码即可:

"Configure for cscope
set nocscopeverbose 
set cscopequickfix=s-,c-,d-,i-,t-,e-
set cst
function LoadCscope(path)
    "防止无限递归
    if a:path == $HOME
        return
    endif
    if (executable("cscope") && has("cscope"))
        let l:outfile=a:path."/cscope.out"
        let l:outpath=a:path
        if filereadable(outfile)
            cs reset
            exe "cs add" outfile outpath
        else
            "递归
            let l:newpath=a:path."/.."
            let newpath=resolve(newpath)
            "echo newpath
            call LoadCscope(newpath) 
        endif
    endif
endfunction
call LoadCscope(getcwd())

这是我 第一次 写的 vimrc 的函数。思路很简单,就是递归找父目录。但有几处障碍让我花费了一个上午。

if a:path == $HOME

vim 中,使用函数传入的参数时要加前缀 a,这一点跟 C,python 之类的就不太一样

let newpath=resolve(newpath)

如果不加这句话,vim 脚本是无法正确的识别文件链接 ..

set nocscopeverbose

有的时候,vim 会自动加载 cscope.out。这个时候,就会发生冲突。加上这句话就能解决该问题。