为什么自动加载cscope.out只有在第二次打开vim后才启用
Why is autoload cscope.out enabled only after opening vim for the second time
我想做的是每次打开vim根据不同的文件类型新建一个cscope数据库,然后自动加载cscope.out
我根据这篇文章编辑我的.vimrc
:how 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=].
我想做的是每次打开vim根据不同的文件类型新建一个cscope数据库,然后自动加载cscope.out
我根据这篇文章编辑我的.vimrc
:how 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=].