我想做的是每次打开vim时根据不同的文件类型创建一个新的cscope数据库,然后自动加载cscope.out
我编辑我的.vimrc
,基于这篇文章:如何自动加载cscope。Out in vim
但是它只在我第二次打开vim时自动加载cscope.out
,第一次打开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
在autocommand"块中,将自动命令添加到默认自动命令组。当您编辑*.py
文件或其他文件时,它们将在之后执行。此时,没有创建数据库。
在"作用域"中块,你将cscope
指向一个数据库,但是没有创建数据库。
在你的vimrc
被采购后,*.py
文件被加载,数据库被创建,但是负责cscope
设置的代码已经运行,所以cscope
不知道你的数据库。
下次运行Vim时,数据库已经存在了,因为它已经在上次运行期间创建了,所以设置cscope
的代码按照预期完成了工作,cscope
得到了一个正确的数据库。
您应该能够通过在数据库创建后将cscope
步骤推迟到来解决问题,这听起来像是:help job_start()
的完美用例。