Vim में इंटरएक्टिव सर्च / रिप्लेस रेगेक्स?


265

मुझे पता है कि वैश्विक परिवर्तन करने के लिए रेगेक्स,

     %s/old/new/g

आप विम में इंटरएक्टिव सर्च-रिप्लेसमेंट करने के बारे में कैसे जाते हैं ?

जवाबों:


462

फ्लैग c (vim कमांड प्रॉम्प्ट में) जोड़ें:

:%s/old/new/gc

'पुरानी' की प्रत्येक घटना पर आपको हां / नहीं में संकेत देगा।

"पुराना" पाठ में हाइलाइट किया गया है;  खिड़की के नीचे यह कहता है कि "नए के साथ बदलें (y / n / a / q / l / ^ E / ^ y?"

पुष्टि के साथ स्थानापन्न करने के बाद उपलब्ध विकल्पों पर उपयोगी जानकारी प्रदान करने में विम की अंतर्निहित मदद का चयन किया गया है। उपयोग:

:h :s

फिर पुष्टिकरण विकल्पों पर अनुभाग पर स्क्रॉल करें। नीचे स्क्रीनशॉट:

पाठ जो कहता है "[C] प्रत्येक प्रतिस्थापन की पुष्टि करें। [...] CTRL-Y स्क्रीन को नीचे स्क्रॉल करने के लिए"

उदाहरण के लिए, इसे और शेष सभी मैचों को स्थानापन्न करने के लिए, उपयोग करें a


30
+1, मैंने आज कुछ नया सीखा है! vim में बहुत सारे छिपे हुए रहस्य हैं .. :)
मार्क नोवाकोव्स्की

10
सीखना vim कमांड थोड़ा सा होता है जैसे कि Nethack खेलना। आप कभी नहीं जानते कि एक एकल चरित्र क्या होने वाला है।
मार्क बायक

22
मैं कल्पना करता हूं कि "ग" "पुष्टि" के लिए है
परिपक्वता

8
मैं ईमानदारी से खर्राटों के रूप में आने की कोशिश नहीं कर रहा हूं, लेकिन यह सब ": मदद: एस" करके पाया जा सकता है, जो आपको सीधे ": मदद: s_flags" तक ले जाएगा।
जेरेमी कैंटरेल

13
@ जेरेमी: जिसे यह जानना आवश्यक है कि मदद कमांड मौजूद है, और यह जानने के लिए कि आपको संबंधित सहायता फ़ाइल पर पहुंचने के लिए "कोलोन एस" स्विच टाइप करने की आवश्यकता है। कैसे या कहाँ से कोई सीखेगा?
डेनिस

79

मार्क Biek का उपयोग कर बताया:

%s/old/new/gc

एक वैश्विक खोज के लिए प्रत्येक प्रतिस्थापन के लिए पुष्टि के साथ बदलें। लेकिन, मैं अंतःक्रियात्मक रूप से सत्यापित करने का भी आनंद लेता हूं कि पुराना पाठ सही ढंग से मेल खाएगा। मैं पहले एक रेगेक्स के साथ एक खोज करता हूं, फिर मैं उस पैटर्न का पुन: उपयोग करता हूं:

/old.pattern.to.match
%s//replacement/gc

s//पिछले खोज पैटर्न का उपयोग करेगा।


9
विम का उपयोग / सीखने के बारे में सबसे बड़ी चीजों में से एक है कि खरगोश छेद कितना गहरा है!
ken

2
अच्छा, मैं हमेशा खोज कर रहा था, फिर अंतिम खोज को विकल्प कमांड में पेस्ट करने के लिए <Cr> / का उपयोग कर रहा था।
एटिला फिलिज़

बिल्कुल क्या मैं उदात्त पाठ से याद आती है!
Xenofex

यह उत्तर विशेष रूप से उपयोगी है, जैसा कि मैंने कई बार कल्पना की कि आप किसी शब्द के उदाहरणों को बदलने का निर्णय लेते हैं, यह वह शब्द है जिसे आपने अभी खोजा है।
M_M

20

मुझे लगता है कि आप ढूंढ रहे हैं c, उदाहरण के लिए s/abc/123/gc, यह VIM को प्रतिस्थापन की पुष्टि करने का कारण बनेगा। देखें: मदद: अधिक जानकारी के लिए स्थानापन्न।


9

मैं आमतौर पर खोज / विकल्प / अगले / दोहराने कमांड का उपयोग करता हूं :-)

/old<CR>3snew<ESC>n.n.n.n.n.n.n.

बात यह है कि find "old", substitute 3 characters for "new", find next, repeat substitute, और इतने पर।

यह बड़े पैमाने पर प्रतिस्थापन के लिए एक दर्द है, लेकिन यह आपको पुराने की कुछ घटनाओं को चुनिंदा रूप से अनदेखा करने देता है (केवल एक प्रतिस्थापन को दोहराने के nबजाय अगले एक को खोजने के लिए फिर से दबाकर .)।


मैं इसी तरह के ग्रंथों के लिए भी इसका उपयोग करता हूं। (3cW <texthere> <ESC> <नए स्थान पर जाएं> <चाल> <चाल>)
स्ट्रैजर करें

1
यह एक एंटीपैटर्न नहीं है! सुंदर है। और आप एन का उपयोग करके विपरीत दिशा में खोज कर सकते हैं। वास्तव में अच्छा है यदि आप एक शब्द देखते हैं और इसे बदलना चाहते हैं। * cwNewText <ESC> Nnn (यह कर्सर के नीचे शब्द से कूद जाएगा, लेकिन फिर जैसे ही आप अगली घटना को बदलेंगे, वापस कूदेंगे।
PEZ

क्या है <CR>?
सोर्ट

9

यदि आप बस 'एबीसी' की घटनाओं की संख्या को गिनना चाहते हैं तो आप कर सकते हैं %s/abc//gn। यह कुछ भी प्रतिस्थापित नहीं करता है, लेकिन सिर्फ 'एबीसी' की घटनाओं की संख्या की रिपोर्ट करता है।


3

यदि आपके प्रतिस्थापन पाठ को प्रत्येक मिलान वाली घटना के लिए बदलने की आवश्यकता है (अर्थात केवल एक प्रतिस्थापन को लागू करने के लिए हां / नहीं चुनना) तो आप एक Vim प्लगइन का उपयोग कर सकते हैं जिसे मैंने इंटरैक्टिव-प्रतिस्थापन कहा है ।


2

नेओविम में अब प्रतिस्थापन का पूर्वावलोकन करने की सुविधा है:

यहां छवि विवरण दर्ज करें

चित्र से लिया गया: https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d फ़ीचर का दस्तावेज़ीकरण: https://neovim.io/doc/user/options.html# 'inccommand'


यह एक nvimअंतर्निहित सुविधा के रूप में बहुत अच्छा है , यह जानने के लिए अच्छा है! साझा करने के लिए धन्यवाद!
LeOn -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.