यह प्रश्न लगभग this question के समान है, सिवाय इसके कि मुझे चार की बजाय तीन रिक्त स्थान (कंपनी कोडिंग दिशानिर्देश) पर जाना है और स्वीकृत समाधान केवल मिलान पैटर्न को दोगुना कर देगा। यहां मेरा पहला प्रयास था:2 स्पेस इंडेंटेशन से 3 तक जाने के लिए स्रोत फ़ाइल को दोबारा कैसे सुधारें?
:%s/^\(\s\s\)\+/\1 /gc
लेकिन यह काम नहीं करता है क्योंकि चार रिक्त स्थान तीन से बदल जाते हैं। तो मुझे लगता है कि मुझे जो चाहिए वह गिनने के लिए कुछ तरीका है कि पैटर्न "+" से कितनी बार मेल खाता है और प्रतिस्थापन के दूसरी तरफ बनाने के लिए उस नंबर का उपयोग करता है, लेकिन मुझे लगता है कि यह कार्यक्षमता शायद विम के रेगेक्स में उपलब्ध नहीं है (चलो मुझे पता है कि आपको लगता है कि यह संभव हो सकता है)।
मैं भी पहले और उसके बाद अगले छोटे मांगपत्र सबसे बड़ा इंडेंट की जगह मैन्युअल रूप से प्रतिस्थापन कर रही करने की कोशिश की जब तक मैं यह सब परिवर्तित हो गया है, लेकिन इस रिक्त स्थान का ट्रैक रखने के मुश्किल था:
:%s/^ \(\S\)/ \1/gc
मैं भेज सकता है यह पर्ल के माध्यम से ऐसा लगता है जैसे पर्ल के पास Extended Patterns के साथ ऐसा करने की क्षमता हो सकती है। लेकिन मैं इसे पर्ल के अपने संस्करण के साथ काम नहीं कर सका। यहाँ एक के गिनती करने की कोशिश कर के साथ मेरा प्रयास था:
:%!perl -pe 'm<(?{ $cnt = 0 })(a(?{ local $cnt = $cnt + 1; }))*aaaa(?{ $res = $cnt })>x; print $res'
मेरे अंतिम उपाय रूपांतरण करने के लिए एक पर्ल स्क्रिप्ट लिखने के लिए किया जाएगा, लेकिन मैं विम में एक अधिक सामान्य समाधान के लिए उम्मीद कर रही थी ताकि मैं करने के लिए विचार का पुन: उपयोग कर सकता है भविष्य में अन्य मुद्दों को हल करें।
यह संभव है;) – Amadan
धन्यवाद अमादन, सही उत्तर के रूप में चिह्नित किया गया। मुझे आश्चर्य है कि कोई मुझे दिखा सकता है कि अगर समाधान पर्ल रेगेक्स के माध्यम से भेजा गया तो समाधान क्या दिख सकता है, क्योंकि मुझे स्क्रिप्ट में ऐसा करने की आवश्यकता हो सकती है? – stephenmm
संबंधित: [बुरी इंडेंट कोड को फिर से इंडेंट करना] (http://vi.stackexchange.com/q/236/467) विम एसई – kenorb