0

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

2 回答 2

2

14in<SNR>14_DependenciesValid指的是与 一起列出的脚本编号:scriptnames

于 2017-01-13T06:21:27.303 回答
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 之前,这是互联网上的一般建议)都不是很有帮助:-(

于 2017-01-13T17:08:31.040 回答