Digamos que eu tenha um script python com um erro de tempo de execução:
$ cat example.py
#! /usr/bin/env python3
a = 1/0
que dá:
$ python3 example.py
Traceback (most recent call last):
File "example.py", line 3, in <module>
a = 1/0
ZeroDivisionError: division by zero
Eu quero que o Vim pule para a linha problemática desse arquivo (linha 3 neste caso). Eu sei que o Vim pode fazer isso porque funciona muito bem para detectar erros em tempo de compilação em C com o gcc
uso :make
e a quickfix
janela.
Claro, eu posso preencher a janela de correção rápida do Vim com :set makeprg=python3\ %
e :make
, em seguida , mas não pula para o número da linha para onde o traceback aponta. Quando olho para :copen
ele, apenas destaca a primeira linha do rastreamento e não posso pular para o número da linha relevante.
(Estou usando o Vim 7.4 no Debian jessie
, caso isso importe.)
Minhas perguntas são:
Posso configurar o Vim para que ele saiba como obter o número da linha relevante de um rastreamento de Python?
Posso modificar o interpretador Python para cuspir um formato de erro que o Vim já sabe analisar e obter o número da linha relevante?
fonte
errorformat
acordo e escrever um plug-in de compilação para o Vim (ver:help :compiler
e:help write-compiler-plugin
). Provavelmente não vale o esforço se você não sabe exatamente o que está fazendo e não está entusiasmado o suficiente para descobrir tudo sobre os documentos.Respostas:
O Vim vem com um conjunto de scripts "compiladores", um dos quais é chamado "pyunit" . Se você executar
:compiler pyunit
e depois:make
(com o valor sugerido para'makeprg'
), o quickfix será preenchido conforme o esperado. No entanto, ele só funciona bem se houver um nível no rastreamento de pilha.Melhorar esse script do compilador seria um exercício útil.
O plug-in unstack pode ser interessante, pois fornece um mecanismo geral para analisar e visualizar os locais relatados em um rastreamento de pilha e possui suporte a Python embutido.
fonte
Plug-in do compilador incorporado
pyunit
Como já sugerido por jamessan , uma opção é usar o plug
pyunit
- in do compilador incorporado :Isso tem o lado negativo, que recolhe o rastreamento de pilha em uma única mensagem de erro. Por exemplo, o seguinte script python:
... produz esta mensagem de erro:
Escrevendo seu próprio plug-in de compilador
Como alternativa, você pode fornecer seu próprio plug-in de compilador em
~/.vim/compiler/python.vim
:Selecione o plug-in manualmente
:compiler python
ou carregue-o automaticamente adicionando-o a~/.vim/after/ftplugin/python.vim
:Com o script python acima, o Vim preenche a janela do quickfix com:
Veja
:help write-compiler-plugin
para mais informações.fonte
quickfix.py analisa o rastreamento em um formato de erro compatível com o vim. Aqui está um exemplo de executá-lo em um arquivo com uma única linha
1 / 0
.Por padrão, ele mostra os arquivos do usuário, mas também pode mostrar os arquivos do sistema (executando-o em um arquivo que contém
import os; os.environ['123']
):Configuração:
Quando
quickfix.py
estiver disponível no caminho atual, adicione as seguintes linhas no vimrc para usá-lo.fonte
Não é um método automático, mas o python Traceback indica o número da linha --- 3 no seu exemplo --- e, portanto, invocando o vim:
$ vim +3 example.py
abrirá o
example.py
cursor com a terceira linha.fonte
:make
um arquivo que já abri, é mais rápido usar:3
para pular para a terceira linha do que fechar e reabrir. Além disso, fazer isso manualmente é um problema para rastreamentos de pilha mais complexos, e é por isso que desejo o suporte ao Quickfix.