मैं इस छोटे से कार्य पर काम कर रहा हूं जो अगली पंक्ति को वर्तमान रेखा तक खींचता है। मैं एक कार्यक्षमता जोड़ना चाहता हूं ताकि यदि वर्तमान लाइन एक लाइन टिप्पणी है और अगली पंक्ति भी एक लाइन टिप्पणी है, तो "पुल-अप" कार्रवाई के बाद टिप्पणी अक्षर हटा दिए जाते हैं।
उदाहरण:
इससे पहले
;; 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
, और क्या टिप्पणी चरित्र क्या है के बारे में Emacs चिंता करते हैं। join-line
comment-region
/* ... */
) को हैंडल करने के लिए पर्याप्त स्मार्ट हो ?