বাফার থেকে সমস্ত মন্তব্য মুছে ফেলার কাজ, এগুলিকে রিং মেরে না নিয়ে


9

আমার এলিসপ কোড থেকে বাফার থেকে সমস্ত মন্তব্য মুছে ফেলতে সক্ষম হতে হবে। আপাতত, আমি ব্যবহার করছি:

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

তবে comment-killএটি একটি ইন্টারেক্টিভ ফাংশন, এবং এর প্রাথমিক ব্যবহার হ'ল একবারে একটি মন্তব্য মুছে ফেলা। অতিরিক্তভাবে, এতে বিরক্তিকর দৃশ্যমান পার্শ্ব-প্রতিক্রিয়া রয়েছে, যেহেতু এটি হত্যা-রিংটিতে এটি হত্যা করা সমস্ত মন্তব্য যুক্ত করে।

বাফার থেকে কিছু বা সমস্ত মন্তব্য মুছে ফেলার (হত্যা না করার) কোনও ফাংশন অনুমতি দিচ্ছে কি?


আপনি M-x flush-lines ^\s-*\/\/বা এই প্রভাব কিছু করতে পারেন। নিখুঁত নয়, তবে কিছু সময় কাজ করতে পারে।
wvxvw

@wvxvw এই পরামর্শের জন্য আপনাকে ধন্যবাদ! যাইহোক, আমি সংক্ষেপে এই পথে যাওয়ার বিষয়টি বিবেচনা করেছি এবং সিদ্ধান্ত নিয়েছি যে এটি খুব জটিল হবে: ফ্লাশ-লাইনগুলি করবে না, কারণ মন্তব্যগুলি পুরো লাইনটি গ্রহণ করতে পারে না (প্রতিস্থাপন-রেজিএক্সপেক্ট ঠিক হবে আমার ধারণা); আরও বিরক্তিকরভাবে, মন্তব্যগুলির জন্য বেশ কয়েকটি বাক্য গঠন রয়েছে এবং এগুলি (সম্ভবত) রেজেক্সপ্সের নাগালের বাইরে তৈরি করে তাদের বাসা বেঁধে দেওয়া যেতে পারে।
টি ভেরন

কৌতূহলের বাইরে আপনি কি মন্তব্যগুলি স্থায়ীভাবে মুছে ফেলতে চান বা সাময়িকভাবে এগুলি থেকে সরে যেতে চান? আপনি কি কেবল তাদের লুকিয়ে রাখতে চান?
ড্র হয়েছে

উত্তর:


11

সাধারণভাবে, এলিসপ কোডের অংশ হিসাবে কমান্ড ব্যবহার করার কোনও সমস্যা নেই। যে ক্রিয়াগুলি কেবলমাত্র ইন্টারেক্টিভ ব্যবহারের জন্য বোঝানো হয় সেগুলি আপনাকে (বা হওয়া উচিত) সম্পর্কে সতর্ক করবে। 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))))

এবং এখানে একটি ফাংশন রয়েছে (এনবি: সর্বনিম্ন পরীক্ষিত) যা আপনাকে কিছুটা অতিরিক্ত কার্যকারিতা সরবরাহ করে, আপনাকে বর্তমান লাইনে, সক্রিয় অঞ্চলে বা পুরো বাফারটিতে মন্তব্যগুলি মুছতে দেয়:

(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)))))

আমি পারফরম্যান্সের সমস্যাগুলি পরীক্ষা করে দেখিনি, তবে সম্ভবত কিলের রিংটি স্পর্শ না করা থেকে একটি ছোট্ট ঝাঁকুনি রয়েছে। নির্বিশেষে, আমি সন্দেহ করি আপনি কর্মক্ষমতা সমস্যাগুলি লক্ষ্য করবেন যদি না আপনি সত্যিকারের বিশাল বাফারের সাথে কাজ করছেন। তবে যেহেতু আপনি খুব ঘন ঘন এই ফাংশনটি ব্যবহার করার সম্ভাবনা নেই, তাই মনে হচ্ছে এটি অপ্টিমাইজেশনে কাজ করার প্রচেষ্টাটির পক্ষে কার্যকর হবে না।


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