टाइपिंग के दौरान नीट सी कमेंट ब्लॉक को स्वचालित रूप से कैसे बनाएं?


17

जब आप एक बहु-पंक्ति टिप्पणी टाइप करना शुरू करते हैं तो कुछ कोड संपादक जैसे कि ग्रहण स्वतः ही ब्लॉक हो जाते हैं:

यहां छवि विवरण दर्ज करें

वहाँ कुछ पैकेज या emacs में यह करने के लिए एक और तरीका है?

संपादित करें: स्पष्ट करने के लिए: मुझे एक कुंजी-संयोजन नहीं चाहिए जो एक टिप्पणी ब्लॉक सम्मिलित करता है। मैं एक टिप्पणी ब्लॉक स्वचालित रूप से बनाया जा करने के लिए जब मैं प्रेस चाहते हैं RETके बाद /*


क्या आपने इस तरह के प्रश्न की जांच की? stackoverflow.com/a/6578421/4780877
Emacs उपयोगकर्ता

@EmacsUser: हाँ। लेकिन ऐसा मैं नहीं चाहता। मैं केवल एक स्निपेट या फीचर को पहले से ही लिखे गए क्षेत्र पर टिप्पणी नहीं करना चाहता।
गीयर


@ दान: यह बहुत करीब है, लेकिन यह स्वचालित रूप से समापन को सम्मिलित नहीं करता है*/
गीयर

2
@ नाम *संकेत सख्ती से आवश्यक नहीं हैं, लेकिन अच्छा है।
गीयर

जवाबों:


7

नीचे दिए गए कोड c-modeबफर में मेरे संक्षिप्त परीक्षण से ठीक काम करते हैं :

  • बाद टाइपिंग /*, मारा M-j, डिफ़ॉल्ट के लिए बाध्यकारी indent-new-comment-line(और डिफ़ॉल्ट के लिए बाध्यकारी c-indent-new-comment-lineमें c-mode)। यदि यह पहली टिप्पणी लाइन है तो समापन समापन वर्ण */ऑटो-सम्मिलित होंगे।
  • उपसर्ग के M-jसाथ अधिक टिप्पणी लाइनें डालने के साथ अधिक बार हिट करना *। यह इन- फ़ंक्शन c-indent-new-comment-line/ इन-बिल्ट व्यवहार है indent-new-comment-lineटिप्पणियों के दस्तावेज़ों की एकाधिक पंक्तियों की जाँच करें ।
  • नीचे दिए गए कोड में एक अतिरिक्त डला यह सुनिश्चित करता है कि *प्रत्येक टिप्पणी लाइन और टिप्पणी के बीच कम से कम एक स्थान हो ।
(defun my-prettify-c-block-comment (orig-fun &rest args)
  (let* ((first-comment-line (looking-back "/\\*\\s-*.*"))
         (star-col-num (when first-comment-line
                         (save-excursion
                           (re-search-backward "/\\*")
                           (1+ (current-column))))))
    (apply orig-fun args)
    (when first-comment-line
      (save-excursion
        (newline)
        (dotimes (cnt star-col-num)
          (insert " "))
        (move-to-column star-col-num)
        (insert "*/"))
      (move-to-column star-col-num) ; comment this line if using bsd style
      (insert "*") ; comment this line if using bsd style
     ))
  ;; Ensure one space between the asterisk and the comment
  (when (not (looking-back " "))
    (insert " ")))
(advice-add 'c-indent-new-comment-line :around #'my-prettify-c-block-comment)
;; (advice-remove 'c-indent-new-comment-line #'my-prettify-c-block-comment)

उदाहरण के लिए, उपरोक्त कोड का मूल्यांकन करने के बाद, मुझे नीचे टाइपिंग आती है /* M-j First comment line M-j Second comment line:। टाइपिंग के अंत में at कर्सर स्थान को इंगित करता है।

/*
 * First comment line
 * Second comment line▮
 */ 

परीक्षण ऑफसेट टिप्पणी ब्लॉक ..

अर्धविराम के बाद कर्सर के साथ, टाइपिंग: /* M-j Test offset commentनीचे देता है। टाइपिंग के अंत में at कर्सर स्थान को इंगित करता है।

#include<stdio.h>
main() {
  printf("Hello World"); /*
                          * Test offset comment▮  
                          */                                 
}

धन्यवाद! यह काम करता है, लेकिन अगर मेरे पास (setq c-default-style "bsd" c-basic-offset 4)है init.el, तो ऐसा होता है: i.imgur.com/KMLx6Ll.gif कोई विचार?
गीयर

1
(move-to-column star-col-num) (insert "*")उपरोक्त समाधान से हटाने से यह आपके लिए ठीक हो जाएगा। मैं सी में कोड नहीं करता हूं, इसलिए मैंने जांच नहीं की है कि चर "bsd"शैली द्वारा निर्धारित क्या हैं ।
कौशल मोदी

से Dafny मोड के साथ इस कोड का उपयोग github.com/boogie-org/boogie-friends , मैं `/ *` `बल्कि की तुलना में * प्रत्येक नई पंक्ति के लिए`।
JAB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.