คำตอบของ @ Malabarba ดูเหมือนเป็นทางออกที่ง่ายที่สุดและหรูหราที่สุด อย่างไรก็ตามหากคุณทำสิ่งนี้มากพอที่จะรับประกันฟังก์ชั่นของตัวเองคุณสามารถปรับตัวcomment-kill
เพื่อลบโดยไม่ต้องดัดแปลงวงแหวนฆ่า นี่คือซอร์สโค้ดของ
comment-kill
การเปลี่ยนบรรทัดเดียวเพื่อกำหนดcomment-delete
:
(defun comment-delete (arg)
"Delete the first comment on this line, if any. Don't touch
the kill ring. With prefix ARG, delete comments on that many
lines starting with this one."
(interactive "P")
(comment-normalize-vars)
(dotimes (_i (prefix-numeric-value arg))
(save-excursion
(beginning-of-line)
(let ((cs (comment-search-forward (line-end-position) t)))
(when cs
(goto-char cs)
(skip-syntax-backward " ")
(setq cs (point))
(comment-forward)
;; (kill-region cs (if (bolp) (1- (point)) (point))) ; original
(delete-region cs (if (bolp) (1- (point)) (point))) ; replace kill-region with delete-region
(indent-according-to-mode))))
(if arg (forward-line 1))))
และนี่คือฟังก์ชั่น (NB: ทดสอบขั้นต่ำ) ซึ่งมีฟังก์ชั่นเพิ่มเติมบางอย่างช่วยให้คุณสามารถลบความคิดเห็นในบรรทัดปัจจุบันในพื้นที่ที่ใช้งานอยู่หรือในบัฟเฟอร์ทั้งหมด:
(defun comment-delete-dwim (beg end arg)
"Delete comments without touching the kill ring. With active
region, delete comments in region. With prefix, delete comments
in whole buffer. With neither, delete comments on current line."
(interactive "r\nP")
(let ((lines (cond (arg
(count-lines (point-min) (point-max)))
((region-active-p)
(count-lines beg end)))))
(save-excursion
(when lines
(goto-char (if arg (point-min) beg)))
(comment-delete (or lines 1)))))
ฉันไม่ได้ตรวจสอบปัญหาด้านประสิทธิภาพ แต่อาจมีการกระแทกเล็กน้อยจากการไม่แตะวงแหวนสังหาร โดยไม่คำนึงถึงฉันสงสัยว่าคุณจะสังเกตเห็นปัญหาประสิทธิภาพการทำงานเว้นแต่คุณกำลังทำงานกับบัฟเฟอร์ขนาดใหญ่อย่างแท้จริง แต่เนื่องจากคุณไม่น่าจะใช้ฟังก์ชั่นนี้บ่อยนักดูเหมือนว่ามันจะไม่คุ้มค่ากับความพยายามในการเพิ่มประสิทธิภาพ
M-x flush-lines ^\s-*\/\/
อะไรบางอย่างเพื่อผลกระทบนั้น ไม่สมบูรณ์แบบ แต่สามารถใช้งานได้บางครั้ง