खाली लाइनों की अनदेखी
आप delete-duplicate-lines
इसके माध्यम से कॉल करके रिक्त लाइनों को अनदेखा करना बता सकते हैं
C-u C-u C-u M-x delete-duplicate-lines
RET
यदि आप नहीं चाहते C-uकि कई बार जब आप कॉल करें delete-duplicate-lines
, तो आप इसे कस्टम कमांड में लपेट सकते हैं और उस कमांड को अपनी पसंद के प्रमुख अनुक्रम में बाँध सकते हैं:
(defun delete-duplicate-lines-keep-blanks ()
(interactive)
(delete-duplicate-lines (region-beginning) (region-end) nil nil t))
(global-set-key (kbd "C-c d") 'delete-duplicate-lines-keep-blanks)
रेगेक्स से मेल खाते लाइनों को अनदेखा करना
आपके प्रश्न के दूसरे भाग के रूप में, मुझे नहीं लगता कि आप उस अंतर्निहित संस्करण का उपयोग करके जो चाहें प्राप्त कर सकते हैं delete-duplicate-lines
। हालाँकि, आप कमांड के एक संशोधित संस्करण का उपयोग कर सकते हैं (जो डिफ़ॉल्ट रूप से रिक्त लाइनें भी रखता है):
(defun delete-duplicate-lines
(beg end keep &optional reverse adjacent keep-blanks interactive)
(interactive
(progn
(barf-if-buffer-read-only)
(list (region-beginning) (region-end)
(read-string "Keep lines matching regexp: ") ; Prompt for regexp to keep
(equal current-prefix-arg '(4))
(equal current-prefix-arg '(16))
t ; Keep blanks by default
t)))
(let ((lines (unless adjacent (make-hash-table :test 'equal)))
line prev-line
(count 0)
(beg (copy-marker beg))
(end (copy-marker end)))
(save-excursion
(goto-char (if reverse end beg))
(if (and reverse (bolp)) (forward-char -1))
(while (if reverse
(and (> (point) beg) (not (bobp)))
(and (< (point) end) (not (eobp))))
(setq line (buffer-substring-no-properties
(line-beginning-position) (line-end-position)))
(if (or (and keep-blanks (string= "" line))
(string-match keep line)) ; Ignore line if it
; matches regexp to keep
(forward-line 1)
(if (if adjacent (equal line prev-line) (gethash line lines))
(progn
(delete-region (progn (forward-line 0) (point))
(progn (forward-line 1) (point)))
(if reverse (forward-line -1))
(setq count (1+ count)))
(if adjacent (setq prev-line line) (puthash line t lines))
(forward-line (if reverse -1 1))))))
(set-marker beg nil)
(set-marker end nil)
(when interactive
(message "Deleted %d %sduplicate line%s%s"
count
(if adjacent "adjacent " "")
(if (= count 1) "" "s")
(if reverse " backward" "")))
count))
यह संस्करण delete-duplicate-lines
आपको regexp के लिए संकेत देगा और regexp से मेल खाने वाली सभी लाइनों को रखेगा। उदाहरण के लिए, सभी पंक्तियों को उस शब्द से रखना, जो Resume
आप करेंगे:
M-x delete-duplicate-lines
RET ^Resume$
RET