ฉันกำลังทำงานกับฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่ดึงบรรทัดถัดไปสู่บรรทัดปัจจุบัน ฉันต้องการเพิ่มฟังก์ชั่นเพื่อที่ว่าถ้าบรรทัดปัจจุบันเป็นความคิดเห็นของบรรทัดและบรรทัดถัดไปเป็นความคิดเห็นของบรรทัดแล้วตัวละครความคิดเห็นจะถูกลบออกหลังจากการกระทำ "ดึงขึ้น"
ตัวอย่าง:
ก่อน
;; 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 'solution ฉันเชื่อว่าตอนนี้จะครอบคลุมกรณีการใช้ของฉันทั้งหมด :)
(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
ปล่อยให้ Emacs กังวลเกี่ยวกับสิ่งที่ตัวละครแสดงความคิดเห็นคืออะไร
/* ... */
) หรือไม่?