क्या विम से सीड-स्टाइल प्रतिस्थापन प्रतिस्थापन के बराबर है?


14

उदाहरण के लिए, जो चीजें मुझे याद आती हैं, उनमें से एक विकल्प कमांड में टाइप करने में सक्षम है, जो कई लाइनों पर काम करेगी।

:/begin/,/end/s/foo/bar/g

उपरोक्त कमांड "बार" के लिए "फू" को "आरंभ" से युक्त और "समाप्ति" के बाद अगली पंक्ति के साथ समाप्त होने के लिए स्थानापन्न करता है।

क्या emacs में कुछ ऐसा ही करने का एक तरीका है?

जवाबों:


7

evilके एक छीन डाउन संस्करण प्रदान करता है ex, तो यह शायद सबसे अच्छा लगता है कि यह एक सटीक ड्रॉप-इन नहीं है। हालांकि, उदाहरण आप काम करता है बॉक्स से बाहर है, बशर्ते कि बिंदु है प्रदान की पूर्व पहली पंक्ति के लिए (यानी, beginअपने उदाहरण में लाइन)।


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

8

यहाँ यह करने का एक तरीका है जो केवल अंतर्निहित कार्यक्षमता का उपयोग करता है:

  1. उस बिंदु के साथ जिसमें पहली घटना होती है begin, दबाएँ C-SPC

  2. की अगली घटना पर जाएं end:

    C-s end RET

  3. इसके fooसाथ बदलें bar:

    M-% foo RET bar RET !

यह इस तथ्य का उपयोग करता है कि query-replaceअगर एक है तो पूरे बफर के बजाय सक्रिय क्षेत्र पर काम करेगा।


बेशक, आप एक कस्टम कमांड को भी परिभाषित कर सकते हैं:

(defun replace-from-to (beg end str repl)
  (interactive "sBegin: \nsEnd: \nsString: \nsReplacement: ")
  (save-excursion
    (goto-char (point-min))
    (let ((start-pos (search-forward beg))
          (end-pos (search-forward end)))
      (replace-string str repl nil start-pos end-pos))))

यह कमांड हमेशा बफर की शुरुआत से खोज करेगा, इसलिए बिंदु के बाद begin/ foo/ endजब आप इसे लागू कर सकते हैं।

इसके माध्यम से एक महत्वपूर्ण बंधन स्थापित करें:

(global-set-key (kbd "C-c r") 'replace-from-to)

5

सामान्य तौर पर, यह एक ऐसी चीज है जिसका आप उपयोग narrow-to-regionकरेंगे।

आप कर्सर को स्थानांतरित करते हैं (उदाहरण के लिए, खोज करके) क्षेत्र की शुरुआत में और दबाएं C-SPC, फिर क्षेत्र के अंत में जाएं और टाइप करें M-x narrow-to-region। अब आप किसी भी खोज को जारी कर सकते हैं और कमांड को बदल सकते हैं जो आप चाहते हैं और वे केवल बफर के संकुचित हिस्से पर लागू होंगे। एक बार काम पूरा M-x widenकरने के बाद, बफर सामग्री को पुनर्स्थापित करने के लिए टाइप करें।


4
यदि begin/ endएक प्रोग्रामिंग भाषा में सीमांकक हैं, तो आप एक कमांड में क्षेत्र का चयन करने के C-M-Spaceलिए चलाने के mark-sexpलिए उपयोग कर सकते हैं ।
dgtized

1
डिफ़ॉल्ट बाइंडिंग: C-x n n( narrow-to-region) और C-x n w( widen)।
इसका अजायबघर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.