संपूर्ण बफ़र में कैसे खोजें और बदलें?


17

खोज और प्रतिस्थापित, द्वारा M-%और !, वर्तमान स्थिति से बफर के अंत तक किया जाता है। मैं इसे पूरे बफर के लिए कैसे कर सकता हूं? धन्यवाद।


2
मेरा सुझाव है कि शीर्षक को "संपूर्ण बफ़र को खोजें और बदलें"। वैश्विक रूप से भी पूरी परियोजनाओं का जिक्र किया जा सकता है।
मालाबार

1
यह एक ऐसा क्षेत्र है जहां विम / ईविल को हरा पाना मुश्किल है::%s/foo/bar
शॉस्टी

@shosti: वास्तव में, मुझे लगता है कि आपके तरीके के लिए अधिक कीस्ट्रोक्स की आवश्यकता होती है। बस
Sayin

जवाबों:


14

मैं अभी भी आपकी शुरुआती स्थिति को बनाए रखते हुए समर्थित नहीं हूँ। (जब खोज अंत तक पहुंच जाए तो मुझे बफर की शुरुआत में लपेटने का कोई रास्ता नहीं दिखता है।)

आपका सबसे अच्छा दांव M-<बफर की शुरुआत में जाने के लिए उपयोग कर रहा है, तब करें query-replace, जब आप C-uC-spaceC-uC-spaceअपने शुरुआती बिंदु पर वापस कूदने के लिए दबाए जाते हैं।


1
यह काम करता है जब transient-mark-modeचालू है। अन्यथा C-SPC C-SPCअस्थायी रूप से सक्षम होगाtransient-mark-mode
nispio

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)

बहुत उपयोगी। धन्यवाद।
15

2

यदि आप आइकल्स का उपयोग करते हैं तो आप कर सकते हैं पूरे बफर (या कई बफ़र्स या फ़ाइलों या बुकमार्क लक्ष्यों) पर खोज-और-बदल हैं

और इसके विपरीत query-replace(जैसे C-x h M-%):

  • आप किसी भी क्रम में मैचों को नेविगेट कर सकते हैं ।

  • प्रतिस्थापन मांग पर है: आपको प्रत्येक मैच पर जाने की आवश्यकता नहीं है और जवाब दें कि इसे प्रतिस्थापित करना है या नहीं।


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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.