प्रतिस्थापन कमांड के लिए पूर्वावलोकन कैसे प्राप्त करें?


9

अक्सर मैं खुद को एक प्रतिस्थापन के प्रदर्शन की ज़रूरत में पाता हूं जो एक बड़ी फ़ाइल पर और गैर-तुच्छ खोज और प्रतिस्थापन अभिव्यक्तियों के साथ मेल खाता होगा।

उदाहरण के लिए, मान लें कि मेरे पास कुछ फ़ंक्शन कॉल हैं okFunction(arg1, arg2 arg3)। हर फ़ंक्शन कॉल के साथ आर्ग अलग-अलग होंगे, ज़ाहिर है। अब कहते हैं कि मैंने एक बेहतर कार्य खोज लिया है जिसकी आवश्यकता नहीं है arg2। मैं आसानी से पूरी फ़ाइल को समायोजित कर सकता हूं

:%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc

हालांकि वैचारिक रूप से सरल, मुझे यकीन नहीं है कि मुझे इस बजाय लंबे पैटर्न में वाक्यविन्यास सही मिला है। cझंडा वास्तव में यहाँ मदद करता है, लेकिन समस्या यह है कि जब पुष्टि के लिए पूछ रहे हैं, vim नहीं दिखाएगा क्या मैच से बदल दिया जाएगा है। मेरा मतलब है, यह प्रतिस्थापन अभिव्यक्ति दिखाएगा, लेकिन मूल्यांकन किए गए परिणाम नहीं। अगर मैं प्रतिस्थापन के साथ पुष्टि करता हूं y, तो विम तुरंत अगले मैच में कूद जाएगा और मुझे यह देखने में कोई दिक्कत नहीं होगी कि मैंने कोई गलती की है।

मैंने vim-over प्लगइन पाया है जो आंशिक रूप से समस्या को हल करता है, लेकिन केवल तभी जब सभी कमांड स्क्रीन पर दिखाई दे रहे हों जब आप कमांड टाइप कर रहे हों। एक बार जब आप एंट्री मारते हैं, तो व्यवहार वही होता है जो मैंने ऊपर वर्णित किया था और मुझे इसका पूर्वावलोकन नहीं मिला।

तो, क्या प्रतिस्थापन विकल्प पर पुष्टि के लिए प्रतिस्थापन अभिव्यक्ति का मूल्यांकन करने का कोई तरीका है?


2
यह विम-बग ट्रैकर में एक व्हिशलिस्ट आइटम है (क्षमा करें, यह वर्तमान में नहीं मिलता है)
क्रिश्चियन ब्रेबेंड

2
इसके लायक यह है कि मैं आमतौर पर पहली पंक्ति में प्रतिस्थापन का उपयोग करता हूं बिना बदलने के लिए %, यह जांचें कि परिणाम वही है जो मैं उम्मीद कर रहा था और फिर प्रतिस्थापन का उपयोग करें %(यह केवल कुछ कीस्ट्रोक्स है:) :<up><c-b>%। स्पष्ट रूप से एक पूर्वावलोकन विकल्प इससे कहीं अधिक कुशल होगा। हालांकि कोई पैच उपलब्ध है शायद एक ही विकल्प के इस प्रकार लेकिन बहुत काम की तरह है कि लगता है के साथ एक vimscript समारोह में प्रतिस्थापन लपेट सकता है ...
statox

2
@ChristianBrabandt ने इसे पाया । यह अभी तक अवर्गीकृत प्राथमिकता के साथ है ...
विटोर इजी

2
@VitorEiji वह नहीं था जिसके बारे में मैं सोच रहा था। लेकिन यह वास्तव में मायने नहीं रखता है, क्योंकि यह वर्तमान में संभव नहीं है। नेओविम 'इनकॉमैंड' विकल्प प्रदान करता है, जो काम कर सकता है (या नहीं, मैं वास्तव में अब नहीं करता)
क्रिश्चियन ब्रेबेंड

बुराई प्रतिस्थापन का पूर्वावलोकन करती है; मैं नहीं जानता कि यह कैसे करता है, हालांकि।
गेरिमिया

जवाबों:


2

एक समाधान मैक्रोज़ है। सभी समस्या क्षेत्रों को हाइलाइट करें और एक बार में एक लाइन पर प्रतिस्थापन करें। फिर तय करें कि आप इसे चाहते हैं या नहीं। एक बार जब आप nअगले क्षेत्र के लिए किया।

आपके मामले के लिए विशेष रूप से:

  1. क्षेत्रों के लिए खोजें: /\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))
  2. मैक्रो रिकॉर्ड करना शुरू करें qq
  3. लागू :s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/g
  4. रिकॉर्डिंग मैक्रो बंद करो q
  5. या तो पूर्ववत करें ( u) या अगले खोज परिणाम पर जाएं ( n)।
  6. मैक्रो लागू करें @q
  7. आवश्यकतानुसार चरण 5 और 6 दोहराएं।

जाहिर है कि आप जो खोज रहे थे वह काफी नहीं है, लेकिन यह आमतौर पर मैं क्या करता हूं।


यह अच्छा है! मैंने कभी महसूस नहीं किया कि जब आप इसके साथ एक खोज करते हैं तो /वह दृश्य चयन के रूप में भी व्यवहार करता है - अच्छा।
the_velour_fog 7

@the_velour_fog " /... एक दृश्य चयन के रूप में व्यवहार करता है।" वास्तव में यह नहीं है। यह काम क्यों करता है इसका कारण यह है कि :s//वर्तमान लाइन पर कार्य करता है और इसका उपयोग nआपको अगली घटना के लिए करता है।
तुम्बलर ४१

1
यदि आप इसके लिए एक पैटर्न निर्दिष्ट नहीं करते :s/pattern/replacementहैं तो अंतिम खोज स्ट्रिंग का उपयोग करेंगे, इसलिए चरण 3 में आप वास्तव में :s//betterFunction(\1, \3)/gकुछ टाइपिंग को बचाने के लिए आवेदन कर सकते हैं ।
हेगिन

@ Tumbler41 आह, स्पष्ट करने के लिए धन्यवाद। हां, मैं खोज की यह मूल तकनीक भी करता हूं , फिर मैक्रो लागू करता हूं, मैं आमतौर पर पहले arglist को पॉप्युलेट करता हूं और :vimgrep /pattern/ ##फिर मैक्रो लागू करता हूं, इस तरह से अगर यह पता चला कि मेरा पैटर्न वास्तव में लगातार मेल खा रहा है और मैक्रो चीज बहुत थकाऊ है, तो मैं जल्दी से कर सकता हूं वापस :argdo %s/.../..../gc
लौटें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.