आदेश है कि प्रारूप (prettify) एलिसिप कोड


21

मान लीजिए कि मेरे पास एक फ़ंक्शन है जो निम्नलिखित की तरह दिखता है (जैसा कि अक्सर होता है जब क्विक आउटपुट प्रिंट करते हैं)।

(defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a))))

मैं एक ऐसी आज्ञा चाहूंगा जो कि मानव को कुछ लिख सके, जैसे कि निम्नलिखित।

(defun my-example-function ()
  (let ((a (do-something))
        (b (do-something)))
    (setq someone me)
    (with-current-buffer b
      (do-that (or this (and that those)))
      (format "%s" a))))

मैं समझता हूं कि एक तरह से एक से अधिक तरीके हैं, जो कि एक प्रकार का क्विक कोड है , और अलग-अलग इंसान इसे अलग तरीके से करते हैं। इसके अलावा, मैं समझता हूं कि यह कुछ व्यक्तिपरक है। लेकिन नियमों का एक सेट के साथ आना काफी आसान होना चाहिए जो कोड में परिणाम देता है जो कम से कम सभ्य है।

मैंने वास्तव में कुछ समय पहले खुद ऐसा करने के बारे में सोचा था, लेकिन मुझे लगा कि पहिए को फिर से लगाने से पहले यह पूछना बेहतर होगा।

ध्यान दें, मुझे pp फ़ंक्शन के बारे में पता है , लेकिन यह वहाँ नहीं मिलता है:

(defun my-example-function nil
  (let
      ((a
        (do-something))
       (b
        (do-something)))
    (setq someone me)
    (with-current-buffer b
      (do-that
       (or this
           (and that those)))
      (format "%s" a))))

4
क्या यह मदद करता है? एलिसिप फॉर्मेटिंग
ल्यूक

स्वरूपण जरूरी व्यक्तिपरक है। मुझे यकीन नहीं है कि आप थोड़ा बेहतर संस्करण से बेहतर कर सकते हैं pp
शोस्ती

@ धन्यवाद, यह निश्चित रूप से प्रासंगिक है।
मलाबारबा

जवाबों:


10

यहाँ बताया गया है कि कैसे लिस्पी ने इसे मेरे लिए फिर से स्वरूपित किया ( Mअभिव्यक्ति के किसी भी छोर पर दबाकर ):

(defun my-example-function ()
  (let ((a (do-something))
        (b (do-something)))
    (setq someone me)
    (with-current-buffer b (do-that (or this (and that those)))
                         (format "%s" a))))

इसे उस प्रारूपण से प्राप्त करने के लिए जिसे आपने निर्दिष्ट किया था, दबाएँ qk C-m [


(local-set-key (kbd "s-8") #'lispy-multiline) (local-set-key (kbd "s-*") #'lispy-oneline)
ग्रेट

8

जैसा कि दूसरों ने टिप्पणियों में सुझाव दिया है, "स्वरूपण" का अर्थ अलग-अलग चीजें हो सकती हैं।

ऐसे इंडेंटेशन के लिए, जो बहुत पारंपरिक है, शीर्ष स्तर के सेक्सप के अंदर कहीं कर्सर के साथ C-M-q( indent-pp-sexpलिस्प मोड में कमांड ) का उपयोग करने का प्रयास करें जिसे आप फिर से इंडेंट करना चाहते हैं (जैसे defunसेक्सप)।

नहीं, यह "स्वचालित" इंडेंटेशन नहीं है, लेकिन इसका उपयोग करने की आदत बन सकती है। ;-)

इंडेंटेशन के अलावा अन्य चीजों के लिए आपको या तो इसे मैन्युअल रूप से करना होगा या अपने स्वयं के "फ़ॉर्मेटिंग" कमांड (रोल) को रोल करना होगा या कुछ ऐसे मौजूदा विकल्प ढूंढने होंगे।

Emacs मैन्युअल, नोड मल्टी-लाइन इंडेंट और Elisp मैनुअल, नोड भी देखें Mode-Specific Indent


3
धन्यवाद, मैं एलिसेंट इंडेंटेशन से काफी खुश हूं, मैं ऐसी चीज की तलाश कर रहा हूं, जो जानती है कि लाइनों को कब तोड़ना है। :-) और हाँ मैं समझता हूँ कि यह व्यक्तिपरक है। :-(
मालाबार

M-q( fill-paragraph) कभी-कभी संदर्भ के आधार पर एमएसीएस-लिस्प मोड में लाइन-ब्रेकिंग के लिए उपयोगी हो सकता है। लेकिन आप शायद संरेखण की भी तलाश कर रहे हैं ...
आकर्षित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.