为什么自动加载cscope.out只有在第二次打开vim后才启用

Why is autoload cscope.out enabled only after opening vim for the second time

我想做的是每次打开vim根据不同的文件类型新建一个cscope数据库,然后自动加载cscope.out

我根据这篇文章编辑我的.vimrchow to auto load cscope.out in vim

但它只自动加载 cscope.out 我第二次打开 vim,第一次打开 vim,它总是显示 no cscope connection

我应该改变什么?

这是我的设置:

if !filereadable("cscope.out")
    autocmd BufRead,BufNewFile *.py !find / -name "*.py" > ~/cscope.files; cscope -Rbq -i ~/cscope.files
    autocmd BufRead,BufNewFile *.java !find / -name "*.java" > ~/cscope.files; cscope -Rbq -i ~/cscope.files
    autocmd BufRead,BufNewFile *.c !find / -name "*.c" -o -name "*.h" > ~/cscope.files; cscope -Rbq -i ~/cscope.files
    autocmd BufRead,BufNewFile *.cpp !find / -name "*.cpp" -o -name "*.hpp" -o -name "*.h" > ~/cscope.files; cscope -Rbq -i ~/cscope.files
    autocmd BufRead,BufNewFile *.hpp !find / -name "*.cpp" -o -name "*.hpp" -o -name "*.h" > ~/cscope.files; cscope -Rbq -i ~/cscope.files
endif

" setting location of cscope db & cscopetag
let CSCOPE_DB="~/cscope.out"                
                                                                              
if has("cscope")
"   set csprg=/usr/local/bin/cscope
    set csto=0
    set cst
    set nocsverb
    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
    " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
    set csverb
endif

在“自动命令”块中,您将自动命令添加到默认自动命令组。当您编辑 *.py 文件或其他文件时,它们将在 之后 执行。此时,没有创建数据库。

在“cscope”块中,您将 cscope 指向一个数据库,但尚未创建任何数据库。

获取 vimrc 后,加载 *.py 文件并创建数据库,但负责 cscope 设置的代码已经 运行 所以cscope 不知道你的数据库。

下次 运行 Vim 时,数据库已经存在,因为它是在上次 运行 期间创建的,因此设置 cscope 的代码确实它按预期工作并且 cscope 获得了正确的数据库。

您应该能够通过在 创建数据库后将 cscope 步骤推迟到 来解决您的问题,这听起来像是 [= 的完美用例19=].