খালি লাইন এবং নির্দিষ্ট শব্দগুলিকে উপেক্ষা করে `মুছা-সদৃশ-লাইনগুলি তৈরি করুন


9

আমি org-মোডে একটি পাঠ্য সম্পাদনা করছি, বেশ কয়েকটি লাইন পুনরাবৃত্তি হয়েছে কারণ তারা একই বিষয় থেকে বিভিন্ন ফাইলের অংশ।

আমি delete-duplicate-linesপুনরাবৃত্ত লাইনগুলি মুছতে ব্যবহার করতে চাই , তবে, কমান্ডটি ফাঁকা রেখাগুলিও সরিয়ে দেয়, যা আমি চাই না (অন্যথায় আমার অনুচ্ছেদগুলি না থাকত!)। আমি কিছু শব্দগুলিকে অগ্রাহ্য করতে চাই যা লাইনগুলিতে একা বিদ্যমান, উদাহরণস্বরূপ, "পুনঃসূচনা" , এটি পাঠ্যে অনেক বার পুনরাবৃত্তি করা হয়েছে, তবে এটি প্রয়োজনীয় হওয়ার পরেও আমি এটি রাখতে চাই।

উত্তর:


5

ফাঁকা লাইন উপেক্ষা করা

এর 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আপনাকে একটি রেজিএক্সএক্সের জন্য অনুরোধ করবে এবং রেজিপ্লেক্সের সাথে মেলে এমন সমস্ত লাইন রাখবে। উদাহরণস্বরূপ, আপনি যে শব্দটি Resumeকরবেন তা নিয়ে সমস্ত লাইন রাখার জন্য :

M-x delete-duplicate-lines RET ^Resume$ RET

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.