चारों ओर थोड़ा और प्रहार करने के बाद, यह पता चला है कि विम बिना स्क्रिप्टिंग के, एक ही आदेश के साथ कर सकता है। उदाहरण के लिए, निम्नलिखित सभी संख्याओं को जोड़ने के लिए जिनका <obj param="आप उपयोग कर सकते हैं:
:%s@<obj param="\(\d\+\)@\='<obj param="' . (submatch(1) + 50)@g
मुझे वह टूट जाने दो।
: vim में कमांड-लाइन मोड में प्रवेश / संकेत करने का सामान्य तरीका है।
%पूरे दस्तावेज़ के दायरे के भीतर का मतलब; आप एक संख्या सीमा में रख सकते हैं, उदाहरण के लिए, 1,50इसे पहले 50 लाइनों के बजाय करने के लिए।
s विकल्प के लिए आशुलिपि है (आप चाहें तो पूरा शब्द लिख सकते हैं)
@सीमांकक है; आप किसी अन्य वर्ण का उपयोग तब तक कर सकते हैं जब तक आप जो खोज रहे हैं वह उसमें नहीं है। बस इसे तीन बार उपयोग करें। (वाक्य रचना के समान है sed।)
परिसीमन की अगली घटना तक सब कुछ @ के लिए खोज करने के लिए रेग पूर्व पैटर्न है, इस मामले में <obj param="उसके बाद \d\+, जो अंकों की संख्या है। \(और \)वहाँ एक भी reg पूर्व समूह है जो की तरह backreferences से मेल खाएंगे के रूप में अंकों की इस पूरे अनुक्रम सेट करने के लिए कर रहे हैं \1, या vim के submatchआदेश।
तब सीमांकक @चिह्नित करता है कि प्रतिस्थापन पाठ के रूप में क्या होता है।
\=यहाँ शुरुआत साधन में नहीं बल्कि एक रेग पूर्व पैटर्न या स्ट्रिंग है, जो यहाँ कुंजी है की तुलना में कुछ का मूल्यांकन अभिव्यक्ति का परिणाम स्थानापन्न करने,।
फिर हमारे पास '<obj param="'प्रतिस्थापन पाठ की शुरुआत के लिए है। .जो इस प्रकार तार श्रृंखलाबद्ध के लिए vim के कार्य है।
submatch(1)एक vim बिल्ट-इन फंक्शन है जिसे केवल एक प्रतिस्थापन कमांड के भीतर इस्तेमाल किया जा सकता है, और स्ट्रिंग को वापस करता है जो रेगेक्स के समान है \1; आप submatch(2)रेगेक्स \2और इतने पर के बराबर के लिए उपयोग करेंगे । ( \0संपूर्ण मिलान किया हुआ पैटर्न है, लेकिन हम यहां ऐसा नहीं चाहते हैं।) \(और \)खोज पैटर्न में इस बात का उपयोग किया जाता है कि क्या मायने रखता है submatch(1)।
इसलिए (submatch(1) + 50)50 को उस संख्या में जोड़ने का परिणाम देता है जो <obj param="खोज पैटर्न में निम्नलिखित अंकों का होता है।
@प्रतिस्थापन पाठ के अंत को चिह्नित करने के लिए सीमांकक का फिर से उपयोग किया जाता है।
ध्वज gका उपयोग प्रतिस्थापन को वैश्विक बनाने के लिए किया जाता है; यदि आप केवल प्रत्येक पंक्ति पर पहला उदाहरण बदलना चाहते हैं, तो आप इसे छोड़ सकते हैं।
आप शायद वहां से अलग-अलग संख्याओं को जोड़ने, या घटाना, या विभाजित करने आदि के लिए काम कर सकते हैं।
vimऔरemacsइस तरह का काम कर सकते हैं, लेकिन इसके लिए एक कमांड का उपयोग करने के बजाय स्क्रिप्ट लिखने की आवश्यकता हो सकती है।