Yazarken otomatik olarak düzgün C yorum blokları nasıl oluşturulur?


17

Tutulma gibi bazı kod editörleri, çok satırlı bir yorum yazmaya başladığınızda otomatik olarak düzgün bloklar oluşturur:

resim açıklamasını buraya girin

Emacs da bunu yapmak için bir paket veya başka bir yolu var mı?

Düzenleme: açıklığa kavuşturmak için: Ben do not bir anahtar kombinasyonu ekler bir açıklama bloğu istiyorum. Ben bastığımda Yorum bloğu otomatik oluşturulmasını istediğiniz RETsonra /*.


Bu benzer soruyu kontrol ettin mi? stackoverflow.com/a/6578421/4780877
Emacs Kullanıcısı

@EmacsUser: Evet. Ama istediğim bu değil. Zaten yazılmış bir bölgeye yorum yapmak için sadece bir pasaj veya özellik istemiyorum.
Geier

Birden Çok Yorum Satırı kılavuzuna bakın .
Dan

@Dan: Bu oldukça yakın, ancak kapanışı otomatik olarak eklemiyor*/
Geier

2
@ İsim *İşaretler kesinlikle gerekli değil, olması güzel.
Geier

Yanıtlar:


7

Aşağıdaki kod, bir c-modearabellekteki kısa testimden iyi çalışıyor :

  • Yazarak sonra /*, isabet M-j, varsayılan için bağlayıcı indent-new-comment-line(ve varsayılan için bağlayıcı c-indent-new-comment-lineiçinde c-mode). İlk yorum satırı ise kapanış kapanış karakterleri */otomatik olarak eklenir.
  • Önek M-jile daha fazla açıklama satırı ekleyerek daha fazla kez vurmak *. c-indent-new-comment-line/ indent-new-comment-lineFonksiyonlarının yerleşik davranışı budur . Check out comments Birden fazla satır belgeler.
  • Aşağıdaki koddaki fazladan bir külçe *her yorum satırında ve yorum arasında en az bir boşluk olmasını sağlar .
(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)

Örneğin, yukarıdaki kod değerlendirdikten sonra, ben yazarak aşağıda olsun: /* M-j First comment line M-j Second comment line. ▮, yazımın sonundaki imleç konumunu belirtir.

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

Ofset yorum bloğunun test edilmesi ..

Noktalı virgülden sonra imleçle: yazmak /* M-j Test offset commentaşağıdakileri verir. ▮, yazımın sonundaki imleç konumunu belirtir.

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

Teşekkürler! Eserler, O ancak ben varsa (setq c-default-style "bsd" c-basic-offset 4)benim, init.elbu gerçekleşir: i.imgur.com/KMLx6Ll.gif fikrin var mı?
Geier

1
(move-to-column star-col-num) (insert "*")Yukarıdaki çözümden kaldırmak bunu sizin için düzeltir. Ben C kodu yok, bu yüzden "bsd"stil tarafından hangi değişkenlerin ayarlandığını araştırmadım .
Kaushal Modi

Bu kodu github.com/boogie-org/boogie-friends adresinden Dafny moduyla kullanarak , her yeni satır için `* ' yerine` / * `alıyorum.
JAB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.