अजगर डॉकस्ट्रिंग में भरण-अनुच्छेद बनाएं ट्रिपल-कोट्स को अलग लाइन पर छोड़ दें


16

मैं इस तरह से एक लाइन पर सभी को एक अजगर को टाइप करता हूं:

"""
This is a long docstring. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis.
"""

और फिर मैंने Mq ( fill-paragraph) मारा , और मुझे यह मिला:

"""This is a long docstring. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec a diam lectus. Sed sit amet ipsum
mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed,
adipiscing id dolor. Pellentesque auctor nisi id magna consequat
sagittis.

"""

मुझे इससे दो समस्याएँ हैं:

  1. डॉकस्ट्रिंग एक ही लाइन पर शुरू होता है """- मैं अपनी लाइन पर ट्रिपल-कोटे रहना पसंद करूंगा।
  2. (बहुत कम प्राथमिकता।) डॉकस्ट्रिंग एक रिक्त रेखा के साथ समाप्त होता है।

ऊपर दिए गए उदाहरण से वंचित है, लेकिन मैं इसमें बार-बार भागता हूं, विशेष रूप से मौजूदा डॉकस्ट्रिंग्स को संपादित करने के लिए जहां मैं बस चाहता हूं M-qऔर पूरे पैरा को फिर से भरना है।

जवाबों:


15

python-fill-docstring-styleतदनुसार अनुकूलित करें , यह मानते हुए कि आप Emacs 24.4 में अंतर्निहित पायथन मोड का उपयोग कर रहे हैं। डिफ़ॉल्ट है pep-257, जो आपके द्वारा देखी गई शैली की ओर जाता है, यानी शुरुआत में कोई नई रेखा नहीं और एक डॉकस्ट्रिंग के अंत से पहले दो नए समाचार।

इस वैरिएबल को बदलें symmetricया djangoपाइथन मोड को अपनी पसंदीदा शैली मानें, अर्थात डॉकस्ट्रिंग की शुरुआत में एक नई रेखा, और अंत से पहले एक नई पंक्ति:

(setq python-fill-docstring-style 'django)

वैकल्पिक रूप से, इसे डॉकस्ट्रिंग स्टाइल को व्यक्तिगत रूप से प्रति प्रोजेक्ट कॉन्फ़िगर करने के लिए डायरेक्टरी वेरिएबल्स के माध्यम से सेट करें।

symmetricऔर djangoअलग-अलग wrt सिंगल-लाइन docstrings हैं। यदि एक डॉकस्ट्रिंग एक लाइन पर फिट बैठता है, तो पूर्व एक ही लाइन पर ट्रिपल उद्धरण डालता है, जबकि दूसरा इस मामले में अलग-अलग लाइनों पर ट्रिपल उद्धरण डालता है।

सभी उपलब्ध विकल्पों को देखने केpython-fill-docstring-style लिए docstring पर एक नज़र डालें ।


-1

खाली लाइन को अंत में लिखें, यह एक सादे बग की तरह दिखता है, कृपया इसे रिपोर्ट करें M-x report-emacs-bug। लेकिन पहले तत्व के लिए, मुझे यकीन नहीं है कि यह एक बग या एक विशेषता है, इसलिए आप इसे अपनी बग रिपोर्ट में उल्लेख करना चाह सकते हैं, लेकिन शायद इसका जवाब यह होगा कि यह "पीईपी-एनएनएन" सम्मेलन का अनुसरण कर रहा है।

इसने कहा, आप निम्नलिखित के साथ पहली समस्या को ठीक करने में सक्षम हो सकते हैं:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))

1
यह न तो बग है, न ही आपको बदलने की आवश्यकता है paragraph-separate। की डॉकस्ट्रिंग शैली python.elअनुकूलन योग्य है।
चंद्र

वाह, मैंने कभी नहीं सोचा होगा कि डॉकस्ट्रिंग के अंत में एक अतिरिक्त खाली लाइन एक मानक द्वारा लागू की जा सकती है।
स्टीफन

1
मानक (PEP 257) वास्तव में इसे लागू नहीं करता है, यह इसकी सिर्फ एक (आम) व्याख्या है। Emacs भी वैरिएबल के बिना वैरिएंट का समर्थन करता है, जैसा कि pep-257-nnअंदर है python-fill-docstring-style
चंद्र

1
विडंबना यह है कि रिक्त लिंक का कारण है: जब तक कि पूरी डॉकस्ट्रिंग एक पंक्ति पर फिट नहीं होती है, तब तक समापन कोट्स को एक पंक्ति में रखें। इस तरह, Emacs की फिल-पैरा कमांड का उपयोग इस पर किया जा सकता है।
फेलिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.