为什么是自动加载作用域.只有在第二次打开vim后才启用Out



我想做的是每次打开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()的完美用例。

相关内容

  • 没有找到相关文章

最新更新