当我启动vim时,我会打印以下错误:
$ vim -V9foo.log
Error detected while processing function <SNR>14_DependenciesValid:
line 12:
Traceback (most recent call last):
File "<string>", line 6, in <module>
AttributeError: 'module' object has no attribute 'vars'
Press ENTER or type command to continue
在这个网站上,我发现了一些使用-V9打印vim正在做的一切的建议。然而,当我这样做的时候,我没有看到失败!
我还可以使用-V9foo.log将它所做的一切打印到日志文件(foo.log)中当我这样做时,启动工作都会打印在那里,但错误会打印到终端。因此,我的猜测是Python插件运行程序不知道vim-V输出目标,或者Python运行时错误直接打印到stderr。
不幸的是,Python错误毫无帮助。我在我的任何vim插件中都找不到一个名为DependenciesValid的函数,其余的错误都是"来源于某个字符串,使用某个模块,找到它很有趣!">
我使用Vundle作为插件,我这样做的唯一原因是我想使用ensime在编辑器中浏览Scala。
注释ensime/ensime-vim会使错误消失,从而定位特定的bundle,但不会让我更接近bundle中错误实际发生的位置或原因。
这是我的。vimrc:
set nocompatible
filetype off
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" Plugin 'jewes/Conque-Shell'
Plugin 'ensime/ensime-vim'
Plugin 'derekwyatt/vim-scala'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" syntastic
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
" My Stuff
set expandtab
set hidden
set ts=4
set ignorecase
set sw=4
我在ubuntu 12.04 LTS上运行(不,目前无法升级。)
$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 4 2012 04:24:26)
Included patches: 1-429
$ uname -a
Linux (hostname) 3.19.0-32-generic #37~14.04.1 SMP Fri Nov 6 00:01:52 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
<SNR>14_DependenciesValid
中的14
是指与:scriptnames
一起列出的脚本编号。
我终于调试好了。
首先,我依次对每个插件进行了注释,直到我发现是哪个插件导致了错误。这是ensime vim。
其次,我将该插件的源代码映射为文本"vars",这是它试图从某个模块读取/写入的变量名。
我找到了一些参考资料,并把它们都查了一遍,弄清楚它们的名字在哪里。事实证明,最近对ensime vim插件的一次更改类似于:
import vim
vim.vars['some_global_name'] = 1
vim 7.3中的"vim"模块不包含"vars"成员,因此此操作失败。
Python可能对此更有帮助。它说"模块"没有一个名为"vars"的成员,但它没有告诉我模块的名称。它可能知道。此外,Python只是说"字符串"是错误的位置——它可以逐字逐句地打印字符串中的行,以帮助跟踪问题。
另外,Vim可能会对此提供更多帮助。它可以知道哪个.vim文件包含出错的Python代码,并且可以打印定义出错的Python的文件/行。
事实证明,-D和-V9(这是在我被Meninx告知-V13之前互联网上的一般建议)都没有那么有用:-(