अंगूठी को मारने के लिए उन्हें स्थानांतरित किए बिना, एक बफर से सभी टिप्पणियों को हटाने का कार्य


9

मुझे एक टिप्‍पणी से सभी टिप्‍पणियों को अल्‍प कोड से निकालने में सक्षम होना चाहिए। अभी के लिए, मैं उपयोग कर रहा हूँ:

(goto-char (point-min))
(comment-kill (count-lines (point-min) (point-max)))

हालाँकि, comment-killएक इंटरैक्टिव फ़ंक्शन है, और इसका प्राथमिक उपयोग एक बार में एक टिप्पणी को हटाना है। इसके अतिरिक्त, यह दृश्यमान साइड-इफेक्ट्स को परेशान करता है, क्योंकि यह सभी टिप्पणियों को मारता-रिंग में मारता है।

क्या कोई फ़ंक्शन बफर से कुछ या सभी टिप्पणियों को हटाने (नहीं मारने) की अनुमति देता है?


आप कर सकते हैं M-x flush-lines ^\s-*\/\/या उस प्रभाव के लिए कुछ। सही नहीं है, लेकिन कुछ समय काम कर सकता है।
wvxvw

@wvxvw सुझाव के लिए धन्यवाद! हालांकि, मैंने संक्षेप में इस तरह से जाने पर विचार किया था, और निष्कर्ष निकाला कि यह बहुत जटिल होगा: फ्लश-लाइनें नहीं करेंगी, क्योंकि टिप्पणियां पूरी लाइन नहीं ले सकती हैं (प्रतिस्थापित-रेक्सएक्सपी ठीक होगा मुझे लगता है); अधिक कष्टप्रद रूप से, टिप्पणियों के लिए कई वाक्यविन्यास हैं, और उन्हें नेस्टेड किया जा सकता है, जिससे यह (संभवतया) rexxps की पहुंच से बाहर हो जाएगा।
टी। वेरॉन

जिज्ञासा से बाहर, क्या आप टिप्पणी को स्थायी रूप से हटा देना चाहते हैं या क्या आप उन्हें अस्थायी रूप से बाहर निकालना चाहते हैं? क्या आप शायद उन्हें छुपाना चाहते हैं?
ड्रयू

जवाबों:


11

सामान्य तौर पर, elisp code के हिस्से के रूप में कमांड का उपयोग करने में कुछ भी गलत नहीं है। वे कार्य जो केवल इंटरैक्टिव उपयोग के लिए हैं (या चाहिए) आपको इस बारे में चेतावनी देते हैं। next-lineउदाहरण के लिए देखें ।

मारने के बजाय, हटाने के लिए, बस सुनिश्चित करें कि kill-ringपरिवर्तन नहीं किया गया है:

(goto-char (point-min))
(let (kill-ring)
  (comment-kill (count-lines (point-min) (point-max))))

हां, मुझे वह मिल गया। इस कमांड के साथ मेरा मुख्य मुद्दा किल-रिंग (जिसका आप जवाब देते हैं), और संभावित अनुकूलन के मुद्दे (जो अगर तुलना करने के लिए कुछ भी नहीं है तो संभावित रहेगा)।
टी। वेरॉन

7

@ मालाबार का जवाब सबसे सरल और सुरुचिपूर्ण समाधान की तरह दिखता है। हालांकि, यदि आप यह पर्याप्त करते हैं कि यह अपने स्वयं के फ़ंक्शन को वारंट करता है, तो आप 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)))))

मैंने प्रदर्शन के मुद्दों की जाँच नहीं की है, लेकिन शायद किल रिंग को नहीं छूने से एक छोटी टक्कर है। भले ही, मुझे संदेह है कि आप प्रदर्शन समस्याओं पर ध्यान देंगे जब तक कि आप वास्तव में बड़े पैमाने पर बफर के साथ काम नहीं कर रहे हैं। लेकिन जब से आप बहुत बार इस फ़ंक्शन का उपयोग करने की संभावना नहीं रखते हैं, ऐसा लगता है कि यह अनुकूलन पर काम करने के प्रयास के लायक नहीं होगा।


ओह, समारोह है बहुत अक्सर बड़े बफ़र्स पर कभी कभी चलाने के लिए, और। लेकिन मशीनरी है कि यह कुछ खराब बाधाओं का हिस्सा है, कम से कम अभी के लिए है।
टी। वेरॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.