পাইথন ট্রেসব্যাকসের জন্য কুইকফিক্স সমর্থন


18

বলুন আমার একটি রানটাইম ত্রুটিযুক্ত পাইথন স্ক্রিপ্ট রয়েছে:

$ cat example.py  
#! /usr/bin/env python3

a = 1/0

যা দেয়:

$ python3 example.py 
Traceback (most recent call last):
  File "example.py", line 3, in <module>
    a = 1/0
ZeroDivisionError: division by zero

আমি চাইছি ভিম সেই ফাইলের সমস্যাযুক্ত লাইনে ঝাঁপিয়ে পড়ুক (এই ক্ষেত্রে লাইন 3)। আমি জানি যে ভিম এটি করতে পারে কারণ এটি gccব্যবহার :makeকরে quickfixউইন্ডো এবং সি'তে সংকলনের সময় ত্রুটিগুলি ধরা ঠিক ঠিক কাজ করে ।

জিসিসি থেকে কুইকফিক্স আউটপুট

অবশ্যই, আমি :set makeprg=python3\ %এবং তারপরে ভিমের কুইকফিক্স উইন্ডোটি পপুলেট করতে পারি :makeতবে এটি লাইন নম্বরটিতে লাফ দেয় না যেখানে ট্রেসব্যাকটি নির্দেশ করে। আমি যখন :copenএটি দেখি কেবল ট্রেসের প্রথম লাইনটি হাইলাইট করে এবং আমি প্রাসঙ্গিক লাইন নম্বরটিতে লাফ দিতে পারি না।

পাইথন 3 থেকে কুইকফিক্স আউটপুট

(আমি jessieযদি গুরুত্বপূর্ণ হয় তবে ডেবিয়ানে আমি ভিম 7.4 ব্যবহার করছি ))

আমার প্রশ্নগুলি হ'ল:

  • আমি কি ভিমকে কনফিগার করতে পারি যাতে এটি কীভাবে পাইথন ট্রেসব্যাক থেকে প্রাসঙ্গিক লাইন নম্বর পেতে হয়?

  • আমি কি ত্রুটি ফর্ম্যাটটি ফুটিয়ে তুলতে পাইথন ইন্টারপ্রেটারকে সংশোধন করতে পারি যা ভিম ইতিমধ্যে জানেন কীভাবে প্রাসঙ্গিক এবং প্রাসঙ্গিক লাইন নম্বর পেতে?


আপনি আপনার স্ক্রিপ্টে লগারটি প্রতিটি লাইনে ট্রেসব্যাক পয়েন্ট তৈরি করতে ( শুরু করার জন্য এখানে দেখুন ) সাবক্লাস করতে পারেন , তারপরে errorformatসেই অনুযায়ী সামঞ্জস্য করুন এবং ভিমের জন্য একটি সংকলক প্লাগইন লিখুন (দেখুন :help :compilerএবং :help write-compiler-plugin)। প্রচেষ্টা যদি আপনি জানেন না মূল্য সম্ভবত না ঠিক কি করছো তুমি এবং আপনার উত্সাহী যথেষ্ট ডক্স থেকে সবকিছু খনন না।
সাতো ক্যাটসুর

আমি Stackoverflow উপর একটি অনুরূপ প্রশ্ন জিজ্ঞাসা, সেখানে আপনি সেই উত্তর কাজে লাগতে পারে stackoverflow.com/questions/11333112/...
jalanb

উত্তর:


7

ভিম "সংকলক" স্ক্রিপ্টগুলির একটি সেট নিয়ে আসে যার একটির নাম "পাইনিট" । আপনি যদি চালনা করেন :compiler pyunitএবং তারপরে :make(এর জন্য আপনার প্রস্তাবিত মান সহ 'makeprg'), কুইকফিক্স আপনার প্রত্যাশা অনুযায়ী পপুলেট হয়। তবে, এটি কেবলমাত্র কার্যকরভাবে কাজ করে যদি স্ট্যাক ট্রেসের এক স্তর থাকে।

সেই সংকলক স্ক্রিপ্টটি উন্নত করা একটি কার্যকর অনুশীলন হবে।

Unstack প্লাগইন সুদ হতে পারে, যেমন বিশ্লেষণ করতে একটি সাধারণ প্রক্রিয়া উপলব্ধ করা হয় এবং দেখতে অবস্থানে একটি স্ট্যাক ট্রেস রিপোর্ট এবং পাইথন সমর্থন বিল্ট ইন আছে।


4

সংকলক প্লাগইনে অন্তর্নির্মিত pyunit

জামেসান ইতিমধ্যে পরামর্শ হিসাবে , একটি বিকল্প হ'ল বিল্ট ইন সংকলক প্লাগইন ব্যবহার করা pyunit:

:compiler pyunit
:set makeprg=python3\ %
:make

এতে ডাউনসাইড রয়েছে, এটি স্ট্যাক ট্রেসটিকে একটি একক ত্রুটি বার্তায় ভেঙে দেয়। উদাহরণস্বরূপ নিম্নলিখিত পাইথন লিপি:

def lumberjack():
    bright_side_of_death()

def bright_side_of_death():
    return tuple()[0]

lumberjack()

... এই ত্রুটি বার্তা উত্পাদন করে:

|| Traceback (most recent call last):
lumberjack.py|7|  IndexError: tuple index out of range

আপনার নিজস্ব সংকলক প্লাগইন লিখছেন

বিকল্প হিসাবে, আপনি এখানে নিজের সংকলক প্লাগইন সরবরাহ করতে পারেন ~/.vim/compiler/python.vim:

if exists("current_compiler")
  finish
endif
let current_compiler = "python"

let s:cpo_save = &cpo
set cpo&vim

CompilerSet errorformat=
      \%*\\sFile\ \"%f\"\\,\ line\ %l\\,\ %m,
      \%*\\sFile\ \"%f\"\\,\ line\ %l,
CompilerSet makeprg=python3\ %

let &cpo = s:cpo_save
unlet s:cpo_save

এর সাথে ম্যানুয়ালি প্লাগইনটি নির্বাচন করুন :compiler pythonবা এটিকে যুক্ত করে এটি স্বয়ংক্রিয়ভাবে লোড করুন ~/.vim/after/ftplugin/python.vim:

if !exists("current_compiler")
  compiler python
endif

উপর থেকে পাইথন স্ক্রিপ্টের সাহায্যে, ভিম এই সাথে কুইকফিক্স উইন্ডোটি পপুলেট করে:

|| Traceback (most recent call last):
lumberjack.py|7| in <module>
||     lumberjack()
lumberjack.py|2| in lumberjack
||     bright_side_of_death()
lumberjack.py|5| in bright_side_of_death
||     return tuple()[0]
|| IndexError: tuple index out of range

দেখুন :help write-compiler-pluginআরও তথ্যের জন্য।


3

quickfix.py ট্রেসব্যাককে একটি ভিএম-বান্ধব ত্রুটিযুক্ত ফর্ম্যাটটিতে পার্স করে। এটি একটি একক লাইনযুক্ত কোনও ফাইলে চালানোর উদাহরণ 1 / 0

❯❯❯ quickfix.py tests/errors/div_by_zero.py
"tests/errors/div_by_zero.py":1: ZeroDivisionError: division by zero

ডিফল্টরূপে, এটি ব্যবহারকারীর ফাইলগুলি দেখায়, তবে এটি সিস্টেম ফাইলগুলিও দেখায় (এটি কোনও ফাইলের মধ্যে এটি চালায় import os; os.environ['123']):

❯❯❯ quickfix.py -a /tmp/test.py                                                                                                        
"/usr/lib/lib/python3.7/os.py":678: KeyError: '123'
"/tmp/test.py":1: in function <module>

কনফিগারেশন:

quickfix.pyবর্তমান পথে কখন উপলভ্য হবে, এটি ব্যবহারের জন্য নিম্নলিখিত লাইনটি ভিএমআরসি-তে যুক্ত করুন।

if has("autocmd")
  autocmd FileType python setlocal makeprg=quickfix.py\ %
  autocmd FileType python setlocal errorformat=%E\"%f\":%l:%m,
endif

-1

একটি স্বয়ংক্রিয় পদ্ধতি নয় তবে পাইথন ট্রেসব্যাকটি আপনার উদাহরণে লাইন নম্বরটি --- 3 লিখেছে: এবং তাই ভিমকে অনুরোধ করছে:

$ vim +3 example.py

example.pyতৃতীয় লাইনে কার্সার দিয়ে খুলবে ।


2
আমি এটি সম্পর্কে অবহিত, তবে এটি কুইকফিক্স সমর্থন সম্পর্কে। আমি :makeইতিমধ্যে খোলা একটি ফাইল চালানোর পরে , :3বন্ধ এবং পুনরায় খোলার চেয়ে তৃতীয় লাইনে ঝাঁপিয়ে পড়া আরও দ্রুততর । এছাড়াও, ম্যানুয়ালি এটি করা আরও জটিল স্ট্যাকের চিহ্নগুলির জন্য ব্যথা, এ কারণেই আমি কুইকফিক্স সমর্থন চাই।
নাথানিয়েল এম। বেভার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.