vim / vimrc: Как найти плагин Python, который не работает
Когда я запускаю 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 крайне бесполезна. Я не могу найти функцию с именем 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
2 ответа
14
в <SNR>14_DependenciesValid
относится к номеру скрипта, указанному в :scriptnames
,
Я наконец отладил это.
Сначала я прокомментировал каждый плагин по очереди, пока не обнаружил, какой из них вызывал ошибку. Это было ensime-vim.
Во-вторых, я нашел источник для этого плагина для текста "vars", который является именем переменной, которую он пытается прочитать / записать из какого-то модуля.
Я нашел несколько ссылок и посмотрел их все, выясняя, где они называются. Оказывается, недавнее изменение плагина ensime-vim сделало что-то похожее на:
import vim
vim.vars['some_global_name'] = 1
Модуль "vim" не содержит члена "vars" в VIM 7.3, поэтому это не удается.
Python может быть более полезным по этому поводу. Он говорит, что "модуль" не имеет члена с именем "vars", но он не говорит мне, как назван модуль. Это может знать. Кроме того, Python просто говорит, что "строка" была местом ошибки - он мог вывести строку из строки, дословно, чтобы помочь отследить проблему.
Отдельно Вим мог бы быть более полезным по этому поводу. Он мог знать, какой файл.vim содержал код Python, в котором произошла ошибка, и он мог распечатать файл / строку, определяющую Python, в котором произошла ошибка.
Оказывается, ни -D, ни -V9 (что является общей рекомендацией в Интернете до того, как Meninx рассказал мне о -V13) не помогли:-(