2010-11-26 11 views
13

संपादित करते समय लिस्प कोड, कभी कभी यह उपयोगी है पूरी तरह से एक उच्च-स्तरीय परिभाषा बाहर टिप्पणी करने के लिए, इस तरह:पेरेडिट का उपयोग करके लिस्प एस-एक्स के सभी या हिस्से को आप कैसे टिप्पणी करते हैं?

;(defun some-fn-which-is-broken (x) 
; ...) 

... या बाहर टिप्पणी एक रों अभिव्यक्ति का ही हिस्सा, इस तरह:

(foo x 
; y 
    z) 

... और फिर आरईपीएल में फ़ाइल और परीक्षण कुछ पुन: संयोजित, आदि

paredit मोड सक्षम होने के साथ

, यह काम नहीं करता। यहाँ ठीक नीचे पहले कोष्ठक से पहले, तो क्या होता है बिंदु है: भाग बाहर टिप्पणी के साथ

; 
(defun some-fn (x) 
    ...) 

ही:

(defun some-fn (x) 
    ...) 

और आप अर्धविराम टाइप करें, क्या दर्ज किया गया है अर्धविराम और एक नई पंक्ति है s-अभिव्यक्ति की:

(foo x 
;  
    y 
    z) 

मुझे लगता है कि अगर परिभाषा एक लाइन में सब है, यह काम करता है:

;(defparameter *foo* 10) 

... लेकिन अन्यथा मुझे यह नहीं पता कि यह कैसे किया जाए। पेरेडिट बहुत अच्छा है, मैं वास्तव में इसका उपयोग करना जारी रखूंगा। क्या कोई ऐसे लिस्पर्स हैं जो इस के आसपास एक रास्ता जानते हैं, या इमाक्स-विज़ार्ड जो paredit-comment-out-s-expr जैसे कुछ से जुड़ने के लिए Emacs Lisp का थोड़ा सा चाबुक कर सकते हैं?

यदि अनिवार्य रूप से एक ही चीज़ को पूरा करने के लिए एक और लिस्पी या Emacsy तरीका है, तो स्रोत के हिस्सों को पुन: संकलित करने के लिए टिप्पणी करते हुए, कृपया उन्हें सुझाव देने में संकोच नहीं करें!

उत्तर

29

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

 
(defun comment-sexp() 
    "Comment out the sexp at point." 
    (interactive) 
    (save-excursion 
    (mark-sexp) 
    (paredit-comment-dwim))) 
+0

सुंदर! बस मैं क्या चाहता था। धन्यवाद! – spacemanaki

+0

@spacemanaki इसके अलावा, सी-एम-एसपीसी दबाकर कई बार कई एस-एक्सप्रेशन का चयन करें, और सी-एम-यू दबाकर कई बार आपको सी-एम-एसपीसी –

+0

दबाए जाने से पहले जो स्थिति चाहिए, उसे प्राप्त करने दें। नोट: यह असम्बद्धता के लिए काम नहीं करता है। – Ven

3

स्टॉपगैप उपाय के रूप में, आप किसी भी मोड से संबंधित जादू को ट्रिगर किए बिना मनमाना चरित्र डालने के लिए सी-क्यू (quoted-insert) का उपयोग कर सकते हैं। उदाहरण के लिए, जावा-मोड में, टाइपिंग कोष्ठक वर्तमान पंक्ति को पुन: प्रस्तुत करते हैं, जो हमेशा मैं नहीं चाहता हूं; ऐसे मामलों में, मैं अपने इंडेंटेशन को सुरक्षित रखने के लिए सी-क्यू के साथ एक कंस्ट्रैसिस डालेगा। सामान्य रूप में टिप्पणी के लिए (या अधिक बार, मैं एक कोष्ठक टाइप करेंगे, खरोज परिवर्तन को ध्यान, अभिशाप, पूर्ववत, और Cq साथ पुनः दर्ज करें।)

, यह शायद एम उपयोग करने के लिए आसान होगा ; अर्धविराम मैन्युअल रूप से टाइप करने के बजाय (comment-dwim)।

+0

यह वास्तव में भी सहायक है, धन्यवाद। – spacemanaki

8

बस एक ओर ध्यान दें::

#+ और #- पाठक मैक्रो sexps बाहर टिप्पणी के लिए बहुत अच्छे हैं

आप बहुत आसानी से एक साधारण आदेश या यहां तक ​​कि एक मैक्रो ऐसा करने के लिए कर सकते हैं।यदि वे *FEATURES* में दिए गए प्रतीक नहीं हैं/तो पाए जाते हैं, तो वे निम्न लिंग को अनदेखा करने की अनुमति देते हैं। बस एक प्रतीक *FEATURES* में नहीं लेने, और #+ इस तरह के साथ उपयोग करें:

#+nil 
(defun foo() 
    ...) 

अब, समारोह परिभाषा नजरअंदाज कर दिया जाएगा (जब तक NIL जो बहुत संभावना नहीं है *FEATURES* में है,)।

+0

जानना अच्छा है! धन्यवाद! – spacemanaki

+1

यदि आप सुपर-सुरक्षित होना चाहते हैं, तो आप एनआईएल के बजाय (OR) का उपयोग कर सकते हैं। –

1

आप एस अभिव्यक्ति (C-M-SPCmark-sexp के लिए) को चिह्नित करने के C-M-SPC M-; उपयोग कर सकते हैं और फिर इसे (M-;comment-dwim के लिए) टिप्पणी।

पेरेडिट 23 में, बस ; टाइप करना कुछ भी नहीं दबाएगा, इसे लाइन से बाहर नहीं करना है। तो यह आपके दूसरे उदाहरण के लिए सही काम करेगा। और यदि आप y के बजाय z पर टिप्पणी करना चाहते हैं तो यह केवल समापन डिलीमीटर को दूसरी पंक्ति में धक्का देगा।