다음 줄을 현재 줄로 끌어 올리는이 작은 기능을 연구 중입니다. 현재 줄이 줄 설명이고 다음 줄도 줄 설명 인 경우 "풀업"작업 후에 설명 문자가 제거되도록 기능을 추가하고 싶습니다.
예:
전에
;; comment 1▮
;; comment 2
부름 M-x modi/pull-up-line
후
;; comment 1▮comment 2
;;
이전 의 문자는 제거됩니다 comment 2
.
(defun modi/pull-up-line ()
"Join the following line onto the current one (analogous to `C-e', `C-d') or
`C-u M-^' or `C-u M-x join-line'.
If the current line is a comment and the pulled-up line is also a comment,
remove the comment characters from that line."
(interactive)
(join-line -1)
;; If the current line is a comment
(when (nth 4 (syntax-ppss))
;; Remove the comment prefix chars from the pulled-up line if present
(save-excursion
(forward-char)
(while (looking-at "/\\|;\\|#")
(delete-forward-char 1))
(when (looking-at "\\s-")
(delete-forward-char 1)))))
위의 기능이 작동하지만 지금에 관계없이 주요 모드의, 그것은 고려할 것 /
또는 ;
나 #
주석 문자로 : (looking-at "/\\|;\\|#")
.
이 라인을보다 지능적으로 만들고 싶습니다. 주요 모드 별.
해결책
@ericstokes의 솔루션 덕분에 아래의 모든 유스 케이스가 아래에 있다고 생각합니다. :)
(defun modi/pull-up-line ()
"Join the following line onto the current one (analogous to `C-e', `C-d') or
`C-u M-^' or `C-u M-x join-line'.
If the current line is a comment and the pulled-up line is also a comment,
remove the comment characters from that line."
(interactive)
(join-line -1)
;; If the current line is a comment
(when (nth 4 (syntax-ppss))
;; Remove the comment prefix chars from the pulled-up line if present
(save-excursion
(forward-char)
;; Delete all comment-start or space characters
(while (looking-at (concat "\\s<" ; comment-start char as per syntax table
"\\|" (substring comment-start 0 1) ; first char of `comment-start'
"\\|" "\\s-")) ; extra spaces
(delete-forward-char 1)))))
comment-start
및 comment-end
문자열은 "/ *"및 "* /"로 설정되어 있습니다 c-mode
(하지만 아님 c++-mode
). 그리고 c-comment-start-regexp
두 스타일에 모두 일치합니다. 가입 후 끝 문자를 삭제 한 다음 시작을 삭제합니다. 하지만 내 솔루션에있을 거라고 생각 uncomment-region
, 및 주석 문자가 무엇을 무엇에 대한 이맥스 걱정을 할 수 있습니다. join-line
comment-region
/* ... */
) 을 처리 할 수있을 정도로 똑똑해지기를 원하십니까 ?