كيف يمكنك التعليق على كل أو جزء من Lisp S-Exp باستخدام Paredit؟

StackOverflow https://stackoverflow.com/questions/4288339

  •  28-09-2019
  •  | 
  •  

سؤال

عند تحرير رمز LISP ، من المفيد أحيانًا التعليق تمامًا على تعريف المستوى الأعلى ، مثل هذا:

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

... أو التعليق فقط جزء من التعبير S ، مثل هذا:

(foo x
;    y
     z)

... ثم إعادة ترجمة الملف واختبار شيء ما في Repl ، إلخ.

مع تمكين بوديت وضع ، هذا لا يعمل. إليك ما يحدث ، إذا كانت النقطة مباشرة قبل Paren الأولى أدناه:

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

وتكتب فاصلة فاصلة ، ما تم إدخاله هو فاصلة منقوطة وخط جديد:

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

نفس الشيء مع التعليق على جزء من التعبير S:

(foo x
;    
     y
     z)

أعتقد أنه إذا كان التعريف كله على سطر واحد ، فهذا يعمل:

;(defparameter *foo* 10)

... لكن على خلاف ذلك ، لا يمكنني معرفة كيفية القيام بذلك. باريت رائع ، أود حقًا الاستمرار في استخدامه. هل هناك أي lispers الذين يعرفون طريقة للتغلب على هذا ، أو emacs-wizards التي يمكن أن تثير القليل من emacs lisp لربط شيء مثل paredit-comment-out-s-expr?

إذا كانت هناك طريقة أكثر إزعاجًا أو emacsy لإنجاز نفس الشيء ، فتعليق على أجزاء من المصدر لإعادة الترجمة ، من فضلك ، لا تتردد في اقتراحهم!

هل كانت مفيدة؟

المحلول

ضع النقطة على الشخصية الأولى من SEXP بأكمل سم الفضاء, والمسألة م- ؛ للقيام بالتعليق. إذا كان من الضروري القيام بذلك ، فسيتم إعادة تنسيق رمز المصدر الخاص بك أيضًا بحيث يكون SexP فقط الذي حددته ، ولا يوجد شيء على نفس الخط ، في تعليق.

يمكنك بسهولة جعل الأمر بسيطًا أو حتى ماكرو للقيام بذلك:

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

نصائح أخرى

مجرد ملاحظة جانبية:

ال #+ و #- وحدات الماكرو للقارئ لطيفة جدا للتعليق على sexps. يسمحون بتجاهل sexp التالي ، إذا لم يتم العثور على الرمز المعطى في *FEATURES*. فقط اختر رمزًا ليس في *FEATURES*, ، واستخدامه مع #+ مثله:

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

الآن ، سيتم تجاهل تعريف الوظيفة (ما لم NIL في داخل *FEATURES*, ، وهو ليس من المحتمل جدًا).

كقياس stopGap ، يمكنك استخدام CQ (quoted-insert) لإدراج شخصية تعسفية دون تشغيل أي سحر متعلق بالوضع. على سبيل المثال ، في وضع Java ، يكتب قوسين يكررون الخط الحالي ، وهو ليس دائمًا ما أريده ؛ في مثل هذه الحالات ، سأدخل قوسين CQ للحفاظ على المسافة البادئة. (أو في كثير من الأحيان ، سأكتب قوسين ، وألاحظ تغيير المسافة البادئة ، واللعنة ، والتراجع ، وإعادة الدخول مع CQ.)

للتعليق بشكل عام ، ربما يكون من الأسهل استخدامه م- ؛ (comment-dwim) بدلا من كتابة المنقصين يدويا.

يمكنك استخدام C-M-SPC M-; للاحتفال بالتعبير S (C-M-SPC إلى عن على mark-sexp) ثم التعليق عليه (M-; إلى عن على comment-dwim).

في Paredit 23 ، مجرد الكتابة ; لن تدفع أي شيء لا يجب أن يكون خارج الخط. لذلك سيفعل الشيء الصحيح لمثالك الثاني. وإذا أردت التعليق z بدلاً من y من شأنه أن يدفع فقط المحدد الختامي إلى خط آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top