Emacs में कर्सर के नीचे वर्तमान शब्द को कैसे बदलें


25

मैं Emacs में कर्सर के नीचे वर्तमान शब्द कैसे बदलूं?

मुझे पता है कि मैं क्वेरी-रिप्लेस या रिप्लेस-स्ट्रिंग का उपयोग कर सकता हूं लेकिन हर बार जब मैं ऐसा करता हूं तो मुझे पूरे स्ट्रिंग को टाइप करने के लिए बदलना पड़ता है, यह सिर्फ कष्टप्रद है।

Vi के पास कमांड कमांड है और मैं प्रतिस्थापन के लिए कर्सर के नीचे शब्द खींचने के लिए एक शॉर्टकट का उपयोग कर सकता हूं:

nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#

किसी को पता है कि इसे Emacs के साथ कैसे करना है?


बाहर की जाँच करें stackoverflow.com/questions/8257009/…
इमानुएल बर्ग

जवाबों:


2

उपयोग कॉपी-पेस्ट: M-d C-_ M-x replace-string RET C-y( kill-word, undo, replace-string, yank)। आप पहले से ही प्रतिस्थापन शुरू कर दिया है, तो आप हमेशा की तरह खिड़की के साथ कॉपी-पेस्ट या स्विचन आदेशों बफ़र करने के लिए मूल बफर में वापस स्विच कर सकते हैं: M-x replace-string RET … C-x o M-d C-_ C-x o C-y। आप एकाधिक शब्दों को बदलने के लिए M-d(जैसे ESC 4 2 M-d) उपसर्ग तर्क का उपयोग कर सकते हैं ।

यदि आप कर्सर पर एक या अधिक शब्दों को बदलने की योजना बना रहे हैं, तो आप इसके बजाय वृद्धिशील खोज ( C-s) से शुरू कर सकते हैं C-w, कर्सर के नीचे शब्द खोजना शुरू करें, फिर M-%स्विच करने के लिए दबाएँ replace-string


26

वृद्धिशील खोज में यह सुविधा है, लेकिन प्रतिस्थापित कार्य नहीं करते हैं। सौभाग्य से, वृद्धिशील खोज करता है एक बार आप एक खोज पद का चयन किया है मोड को बदलने के लिए स्विच करने के लिए एक रास्ता नहीं है। इसलिए:

  • C-sवृद्धिशील खोज मोड पर स्विच करने के लिए दबाएँ
  • C-wवर्तमान शब्द को खोज बफ़र में yank करने के लिए दबाएँ। आप इसे कई शब्दों को जोड़ने के लिए दबाकर रख सकते हैं, और आप C-M-yअलग-अलग वर्णों को और C-yसंपूर्ण लाइनों को yank करने के लिए भी उपयोग कर सकते हैं
  • M-%आपके द्वारा पहले से बनाए गए खोज बफर का उपयोग करके मोड को बदलने के लिए स्विच करने के लिए दबाएं

जैसा कि आप शायद M-%सामान्य रूप से उपयोग करने से जानते हैं , यह एक क्वेरी प्रतिस्थापन मोड है जहां यह आपको प्रत्येक मैच के साथ क्या करने के लिए संकेत देता है। यदि आप उन सभी को बदलना चाहते हैं, !तो पहले मैच में हिट करें


9
;; query-replace current word
(defun qrc (replace-str)
   (interactive "sDo query-replace current word with: ")
   (forward-word)
   (let ((end (point)))
      (backward-word)
      (kill-ring-save (point) end)
      (query-replace (current-kill 0) replace-str) ))

1
यह समाधान अच्छी तरह से काम करता है और इसे मैन्युअल रूप से कैसे करना है, यह बताने से ज्यादा उपयोगी है। मैं वैसे ही बहुत आलसी हूं जो कॉपी-एंड-पेस्ट से परेशान है।
पॉल कोकोली

2

मैं एमएसीएस के लिए बिल्कुल नया हूं लेकिन मैं निम्नलिखित सुझाव दे सकता हूं:

M-b       to move backward over a word
M-d       to kill up to the end of the word

अब आप एक नया शब्द लिख सकते हैं। लगभग cwविम की तरह काम करता है


1

यदि आप कर्सर के नीचे शब्द को भरने वाले M-S-%प्रेस के साथ सर्च-एंड-रिप्लेसमेंट M-nमें जाते हैं, तो इसे फिर से दबाने पर यह "सिंबल डिमाइटर" में लपेटता है।


1

मैं संघर्ष कर रहा था और विम से Emacs के लिए कदम के बाद से एक ही बात करना चाहता था।

कुछ शोध और प्रयोग करने के बाद, मैं नीचे दिए गए फंक्शन में आया, जिससे आप एविल पैकेज को स्थापित करने या स्पेसमैक्स का उपयोग करने की अनुमति दे सकते हैं।

यह सक्रिय क्षेत्र (या दृश्य चयन में) के साथ भी काम करता है और यह एबीसी-डिफेंस-हाईक जैसे शब्द को बदलने के लिए काफी उपयोगी हो सकता है:

; replace current word or selection using vim style for evil mode
(defun evil-replace-word-selection()
(interactive)
(if (use-region-p)
    (let (
            (selection (buffer-substring-no-properties (region-beginning) (region-end))))
        (if (= (length selection) 0)
        (message "empty string")
        (evil-ex (concat "'<,'>s/" selection "/"))
        ))
    (evil-ex (concat "%s/" (thing-at-point 'word) "/"))))

फिर अपने init.el में, एक ही कुंजी बाइंडिंग को परिभाषित करें:

(global-set-key (kbd "\C-co") 'evil-replace-word-selection)

कीबाइंडिंग विम स्पेस से थोड़ा अलग है जो "स्पेस जेड" है, लेकिन मैंने यह पता नहीं लगाया है कि ईमैक में मैप कैसे किया जाता है जब बुराई मोड है। एक उपसर्ग आदि की शिकायत करते रहें और मैं अपेक्षाकृत नया हूं। लेकिन अभी भी बहुत बुरा नहीं है और खुद इस समाधान से खुश हैं।


0

इसका उत्तर पहले ही दिया जा चुका है और मैं टिप्पणी नहीं कर सकता क्योंकि मेरे पास अभी पर्याप्त प्रतिष्ठा नहीं है। लेकिन तुम जो देख रहे हो वह ciwव्यर्थ है।

Emacs में मैं इस संयोजन के सबसे करीब आया हूं:

M-b M-d

यह कर्सर के चालू होने की शुरुआत में वापस जाता है और फिर शब्द को हटा देता है।

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