입력하는 동안 깔끔한 C 주석 블록을 자동으로 만드는 방법은 무엇입니까?


17

여러 줄 주석을 입력하기 시작할 때 이클립스와 같은 일부 코드 편집기는 자동으로 깔끔한 블록을 형성합니다.

여기에 이미지 설명을 입력하십시오

이맥스에서도 패키지 또는 다른 방법이 있습니까?

편집 : 명확히하기 위해 : 주석 블록을 삽입하는 키 조합을 원하지 않습니다 . RETafter 키를 누르면 주석 블록이 자동으로 생성되기를 원합니다 /*.


이 비슷한 질문을 확인 했습니까? stackoverflow.com/a/6578421/4780877
Emacs 사용자

@EmacsUser : 예. 그러나 그것은 내가 원하는 것이 아닙니다. 스 니펫이나 기능으로 이미 작성된 지역에 댓글을 달고 싶지 않습니다.
Geier

여러 줄의 주석 설명서를 참조하십시오 .
Dan

@ Dan : 그것은 아주 가깝지만 자동으로 닫는 것을 삽입하지 않습니다*/
Geier

2
@Name *표시는 꼭 필요한 것은 아니지만 가지고있는 것이 좋습니다.
Geier

답변:


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. ▮는 입력이 끝났을 때 커서 위치를 나타냅니다.

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

오프셋 주석 블록 테스트 ..

세미콜론 뒤에 커서를두고 입력 /* M-j Test offset comment하면 다음과 같습니다. ▮는 입력이 끝났을 때 커서 위치를 나타냅니다.

#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 어떤 생각?
Geier

1
(move-to-column star-col-num) (insert "*")위의 솔루션에서 제거 하면 문제가 해결됩니다. C로 코딩하지 않았으므로 "bsd"스타일 로 설정되는 변수를 조사하지 않았습니다 .
Kaushal Modi

에서 Dafny 모드로이 코드를 사용하여 github.com/boogie-org/boogie-friends를 , 나는`/ * '이 아니라 *`보다는 각 줄 바꿈에 대한`얻는다.
JAB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.