当我启动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会使错误消失,定位特定的包,但不会让我更接近错误实际发生的包中的位置,或者为什么。
这是我的.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
答案 0 :(得分:2)
14
中的<SNR>14_DependenciesValid
是指:scriptnames
列出的脚本编号。
答案 1 :(得分:0)
我终于调试了这个。
首先,我依次注释掉每个插件,直到找到导致错误的插件。这是ensime-vim。
其次,我为该文件“vars”插入了该插件的源代码,这是它试图从某个模块读取/写入的变量名称。
我找到了一些参考资料,并查看了所有参考资料,找出了它们的所在位置。 事实证明,最近对ensime-vim插件的更改做了类似的事情:
import vim
vim.vars['some_global_name'] = 1
“vim”模块在VIM 7.3中不包含“vars”成员,因此失败。
Python可能对此更有帮助。它说“模块”没有名为“vars”的成员,但它没有告诉我模块的名称。它可以知道。 此外,Python只是说“字符串”是错误的位置 - 它可以逐字打印字符串,以帮助追踪问题。
另外,Vim可能对此更有帮助。它可以知道哪个.vim文件包含了错误的Python代码,并且它可以打印定义了错误的Python的文件/行。
事实证明,既不是-D,也不是-V9(这是我在Meninx被告知-V13之前在互联网上的一般建议)都很有帮助: - (