কীভাবে পুরো বাফারটিতে অনুসন্ধান এবং প্রতিস্থাপন করবেন?


17

অনুসন্ধান করুন প্রতিস্থাপন দ্বারা M-%এবং !, বাফার শেষে বর্তমান অবস্থান থেকে সম্পন্ন করা হয়। পুরো বাফারের জন্য আমি কীভাবে এটি করতে পারি? ধন্যবাদ।


2
আমি শিরোনামটি "পুরো বাফার অনুসন্ধান এবং প্রতিস্থাপন করুন" এ পরিবর্তনের পরামর্শ দিচ্ছি। বিশ্বব্যাপী পুরো প্রকল্পের উল্লেখ করা যেতে পারে।
মালাবারবা

1
এটি এমন একটি অঞ্চল যেখানে ভিম / এভিলকে পরাস্ত করা শক্ত::%s/foo/bar
shosti

@ শোস্টি: আসলে, আমি মনে করি আপনার পদ্ধতিতে আরও কীস্ট্রোক প্রয়োজন requires শুধু বলুন ';-)
নিসপিও

উত্তর:


14

এখনও আপনার শুরুর অবস্থান ধরে রাখার সময় আমি এটি সমর্থিত দেখতে পাচ্ছি না। (অনুসন্ধানের শেষে পৌঁছালে আমি বাফারের শুরুতে মোড়ানোর কোনও উপায় দেখি না))

আপনার সেরা বাজিটি M-<বাফারের শুরুতে যেতে ব্যবহার করছে, তারপরে query-replaceআপনি যখন C-uC-spaceC-uC-spaceশুরু করলেন তখন আপনার শুরুতে ফিরে যেতে চাপুন ।


1
চালু থাকলে এটি কাজ transient-mark-modeকরে। অন্যথায় C-SPC C-SPCঅস্থায়ীভাবে সক্ষম হবেtransient-mark-mode
নিস্পিও

5
সি-এসপিসির সাহায্যে ম্যানুয়ালি চিহ্ন সেট করার দরকার নেই। এম- <(এবং আরও অনেকগুলি কমান্ড যা সম্ভাব্যভাবে "দীর্ঘ পয়েন্টে চলে যায়") এটি আপনার জন্য করে।
ম্যাথিয়াস দহল

9

আপনি আপনার ইমাস প্রারম্ভিকরণ ফাইলটিতে নিম্নলিখিত কমান্ডটি যুক্ত করতে পারেন এবং এটি আপনার পছন্দের কীস্ট্রোকের সাথে আবদ্ধ করতে পারেন।

(defun replace-regexp-entire-buffer (pattern replacement)
  "Perform regular-expression replacement throughout buffer."
  (interactive
   (let ((args (query-replace-read-args "Replace" t)))
     (setcdr (cdr args) nil)    ; remove third value returned from query---args
     args))
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward pattern nil t)
      (replace-match replacement))))

9

আপনি নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করতে পারেন:

  • C-x h- পুরো বাফারটি নির্বাচন করুন বা M-< - বাফারের শীর্ষে যান
  • M-% - সূচনা query-replace
  • ! - সব প্রতিস্থাপন জোর
  • C-u C-SPC C-u C-SPC - আপনার শুরুর অবস্থানে ফিরে যান

এটি আরও মনোযোগ পেতে হবে।
ইন্দ্র

3

ডিফল্টরূপে পুরো বাফারটিতে শব্দটি প্রতিস্থাপনের init.elআচরণটি আপডেট করতে আপনি এটি আপনার ফাইলে যুক্ত করতে পারেন M-%:

(defun my/query-replace (from-string to-string &optional delimited start end)
  "Replace some occurrences of FROM-STRING with TO-STRING.  As each match is
found, the user must type a character saying what to do with it. This is a
modified version of the standard `query-replace' function in `replace.el',
This modified version defaults to operating on the entire buffer instead of
working only from POINT to the end of the buffer. For more information, see
the documentation of `query-replace'"
  (interactive
   (let ((common
      (query-replace-read-args
       (concat "Query replace"
           (if current-prefix-arg " word" "")
           (if (and transient-mark-mode mark-active) " in region" ""))
       nil)))
     (list (nth 0 common) (nth 1 common) (nth 2 common)
       (if (and transient-mark-mode mark-active)
           (region-beginning)
         (buffer-end -1))
       (if (and transient-mark-mode mark-active)
           (region-end)
         (buffer-end 1)))))
  (perform-replace from-string to-string t nil delimited nil nil start end))
;; Replace the default key mapping
(define-key esc-map "%" 'my/query-replace)

এবং থেকে একই আচরণ পেতে query-replace-regexp:

(defun my/query-replace-regexp (regexp to-string &optional delimited start end)
  "Replace some things after point matching REGEXP with TO-STRING.  As each
match is found, the user must type a character saying what to do with
it. This is a modified version of the standard `query-replace-regexp'
function in `replace.el', This modified version defaults to operating on the
entire buffer instead of working only from POINT to the end of the
buffer. For more information, see the documentation of `query-replace-regexp'"
  (interactive
   (let ((common
      (query-replace-read-args
       (concat "Query replace"
           (if current-prefix-arg " word" "")
           " regexp"
           (if (and transient-mark-mode mark-active) " in region" ""))
       t)))
     (list (nth 0 common) (nth 1 common) (nth 2 common)
       (if (and transient-mark-mode mark-active)
           (region-beginning)
         (buffer-end -1))
       (if (and transient-mark-mode mark-active)
           (region-end)
         (buffer-end 1)))))
  (perform-replace regexp to-string t t delimited nil nil start end))
;; Replace the default key mapping
(define-key esc-map [?\C-%] 'my/query-replace-regexp)

খুব দরকারী. ধন্যবাদ।
এনভিউন

2

আপনি যদি আইকিকেল ব্যবহার করেন তবে আপনি পুরো বাফার (বা একাধিক বাফার বা ফাইল বা বুকমার্ক লক্ষ্যগুলি) অনুসন্ধান এবং প্রতিস্থাপন করতে পারেন ।

এবং query-replace(যেমন C-x h M-%) এর বিপরীতে :

  • আপনি কোনও ক্রমে ম্যাচগুলি নেভিগেট করতে পারেন ।

  • প্রতিস্থাপনের চাহিদা রয়েছে: আপনার প্রতিটি ম্যাচ ঘুরে দেখার দরকার নেই এবং এটি প্রতিস্থাপন করা হবে কি না answer


0

এই সমাধানটি আমি বর্তমানে ব্যবহার করছি এটি বাফারের সূচনা থেকে শুরু হয়ে প্রতিস্থাপনের পরে পুরানো পয়েন্টে ফিরে যাবে।

(defun query-replace-from-top ()
  (interactive)
  (let ((orig-point (point)))
    (save-excursion
      (goto-char (point-min))
      (call-interactively 'query-replace))
    (message "Back to old point.")
    (goto-char orig-point)))
(bind-key* "M-%" 'query-replace-from-top)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.