Katakanlah saya memiliki skrip python dengan kesalahan runtime:
$ cat example.py
#! /usr/bin/env python3
a = 1/0
pemberian yang mana:
$ python3 example.py
Traceback (most recent call last):
File "example.py", line 3, in <module>
a = 1/0
ZeroDivisionError: division by zero
Saya ingin Vim melompat ke baris bermasalah dari file itu (baris 3 dalam kasus ini). Saya tahu Vim dapat melakukan ini karena berfungsi dengan baik untuk menangkap kesalahan pada waktu kompilasi di C dengan gcc
menggunakan :make
dan quickfix
jendela.
Tentu, saya dapat mengisi jendela perbaikan cepat Vim dengan :set makeprg=python3\ %
dan kemudian :make
, tetapi tidak melompat ke nomor baris tempat traceback menunjuk. Ketika saya melihatnya :copen
hanya menyoroti baris pertama jejak, dan saya tidak bisa melompat ke nomor baris yang relevan.
(Saya menggunakan Vim 7.4 di Debian jessie
jika itu penting.)
Pertanyaan saya adalah:
Bisakah saya mengonfigurasi Vim sehingga ia tahu cara mendapatkan nomor baris yang relevan dari traceback Python?
Bisakah saya memodifikasi juru bahasa Python untuk memuntahkan format kesalahan yang Vim sudah tahu bagaimana mem-parsing dan mendapatkan nomor baris yang relevan?
sumber
errorformat
dan tulis plugin kompiler untuk Vim (lihat:help :compiler
dan:help write-compiler-plugin
). Mungkin tidak sepadan dengan usaha jika Anda tidak tahu persis apa yang Anda lakukan dan Anda tidak cukup antusias untuk menggali semuanya dari dokumen.Jawaban:
Vim hadir dengan sekumpulan skrip "compiler", salah satunya disebut "pyunit" . Jika Anda menjalankan
:compiler pyunit
dan kemudian:make
(dengan nilai yang disarankan untuk'makeprg'
), perbaikan cepat diisi seperti yang Anda harapkan. Namun, itu hanya berfungsi dengan baik jika ada satu level ke jejak stack.Meningkatkan skrip kompiler akan menjadi latihan yang bermanfaat.
The unstack Plugin mungkin menarik, karena menyediakan mekanisme umum untuk mengurai dan melihat lokasi dilaporkan dalam setumpuk jejak dan memiliki dukungan Python dibangun di.
sumber
Plugin kompiler bawaan
pyunit
Seperti yang sudah disarankan oleh jamessan , satu opsi adalah menggunakan plugin kompiler bawaan
pyunit
:Ini memiliki downside, bahwa itu mengurangkan jejak stack ke pesan kesalahan tunggal. Misalnya skrip python berikut:
... menghasilkan pesan kesalahan ini:
Menulis plugin kompiler Anda sendiri
Sebagai alternatif, Anda dapat menyediakan plugin kompiler Anda sendiri di
~/.vim/compiler/python.vim
:Pilih plugin secara manual
:compiler python
, atau muat secara otomatis dengan menambahkan ini ke~/.vim/after/ftplugin/python.vim
:Dengan skrip python dari atas, Vim mengisi jendela perbaikan cepat dengan:
Lihat
:help write-compiler-plugin
untuk informasi lebih lanjut.sumber
quickfix.py mem-parsing traceback ke dalam format kesalahan yang ramah-vim. Berikut adalah contoh menjalankannya pada file dengan satu baris
1 / 0
.Secara default, ini menunjukkan file pengguna, tetapi juga dapat menampilkan file sistem (menjalankannya pada file yang mengandung
import os; os.environ['123']
):Konfigurasi:
Ketika
quickfix.py
tersedia di jalur saat ini, tambahkan baris berikut di vimrc untuk menggunakannya.sumber
Bukan metode otomatis tetapi Traceback python menyatakan nomor baris --- 3 dalam contoh Anda --- dan dengan demikian menjalankan vim:
$ vim +3 example.py
akan membuka
example.py
dengan kursor di baris ketiga.sumber
:make
file yang sudah saya buka, lebih cepat digunakan:3
untuk melompat ke baris ketiga daripada menutup dan membuka kembali. Selain itu, melakukan ini secara manual sangat menyebalkan untuk jejak tumpukan yang lebih kompleks, itulah sebabnya saya ingin dukungan Quickfix.