2017-01-13 6 views
0

Когда я запустить Vim, я получаю следующее сообщение об ошибке напечатал:ВИМ/vimrc: Как найти плагин Python, который неисправного

$ 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-ошибка чрезвычайно бесполезна. Я не могу найти функцию с именем DependenciesValid в любом из моих плагинов vim, а остальная часть ошибки - все «из какой-то строки, используя какой-то модуль, получайте удовольствие, найдя, где это!»

Я использую 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

ошибка печатается на потому что он связан с внешней командой в скрипте во время выполнения. –

+0

Попробуйте с '-V13' регистрировать ошибки и обработку исключений. –

+0

Итак, вы действительно нашли плагин bundle = Если у вас есть проблемы с поиском и устранением неисправностей, спросите автора плагина о помощи/улучшенных средствах устранения неполадок/исправить. –

ответ

2

14 в <SNR>14_DependenciesValid относится к числу сценариев как указано в :scriptnames.

+0

Это очень полезно! Спасибо. Я думаю, что было бы еще более полезно, если бы vim мог сказать мне, какой файл vim заставил сценарий работать с ошибкой, и в идеале в этом скрипте был определен неверный текст. –

0

Я наконец отладил это.

Во-первых, я прокомментировал каждый плагин по очереди, пока не нашел, какой из них вызывает ошибку. Это было ensime-vim.

Во-вторых, я скопировал источник для этого плагина для текста «vars», который является именем переменной, которое он пытается прочитать/записать из некоторого модуля.

Я нашел несколько ссылок и просмотрел их все, выяснив, где их называют. Оказывается, последние изменения в ensime-ВИМ плагин сделал что-то похожее на:

import vim 
vim.vars['some_global_name'] = 1 

Модуль «ВИМ» не содержит «вары» член в VIM 7.3, следовательно, это не удается.

Python может быть более полезным в этом вопросе. Он говорит, что «модуль» не имеет члена с именем «vars», но он не говорит мне, как называется этот модуль. Он мог это знать. Кроме того, Python просто говорит, что «строка» была местом ошибки - она ​​могла печатать строку из строки, дословно, чтобы помочь отследить проблему.

Отдельно, Vim может быть более полезным в этом вопросе. Он мог знать, какой .vim-файл содержит код Python, который был выведен из строя, и он мог распечатать файл/строку, в которой был указан Python, который был выведен из строя.

Оказывается, ни -Д, ни -V9 (который является общей рекомендации в Интернете, прежде чем мне было сказано о -V13 на мозговой оболочки) было все, что полезно :-(