vim / vimrc:如何找到失败的Python插件

时间:2017-01-13 04:18:57

标签: vim vundle ensime

当我启动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

2 个答案:

答案 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之前在互联网上的一般建议)都很有帮助: - (