1 - यदि आपके पास स्थान हैं और टैब चाहते हैं।
सबसे पहले, आपको यह तय करने की आवश्यकता है कि कितने स्थानों में एक ही टैब होगा। उस ने कहा, मान लीजिए कि आपके पास प्रमुख 4 रिक्त स्थान हैं, या 8 ... आपके द्वारा यह महसूस किया जाता है कि आप संभवतः 4 स्थान होना चाहते हैं। अब उस जानकारी के साथ, आप करते हैं:
:set ts=4
:set noet
:%retab!
यहाँ एक समस्या है! आदेशों का यह क्रम आपके सभी पाठों के लिए लगेगा, न कि लाइन की शुरुआत में रिक्त स्थान। इसका मतलब है कि एक स्ट्रिंग जैसी: "Hey,␣this␣␣␣␣is␣4␣spaces"
बन जाएगी "Hey,␣this⇥is␣4␣spaces"
, लेकिन इसकी नहीं! यह एक टैब है!
इस छोटे से समस्या मैं एक सिफारिश व्यवस्थित करने के लिए search
, के बजाय retab
।
:%s/^\(^I*\)␣␣␣␣/\1^I/g
यह खोज पूरी फाइल में किसी भी लाइन के लिए शुरू होगी, जो भी टैब की संख्या के साथ है, उसके बाद ४ स्थान हैं, और जो भी टैब मिला उसे एक के लिए स्थानापन्न करें।
यह, दुर्भाग्य से, एक बार में नहीं चलेगा!
सबसे पहले, फ़ाइल में रिक्त स्थान के साथ शुरू होने वाली लाइनें होंगी। खोज तब केवल पहले 4 स्थानों को एक टैब में बदलेगी, और निम्नलिखित ...
आपको कमांड दोहराने की आवश्यकता है। कितनी बार? जब तक आप ए pattern not found
। मैं अभी तक इस प्रक्रिया को स्वचालित करने का कोई तरीका नहीं सोच सकता। लेकिन अगर आप करते हैं:
`10@:`
आप शायद कर रहे हैं। यह कमांड अंतिम खोज को दोहराता है / 10 बार प्रतिस्थापित करता है। इसकी संभावना नहीं है कि आपके कार्यक्रम में बहुत सारे संकेत होंगे। यदि ऐसा है, तो फिर से दोहराएं @@
।
अब बस जवाब पूरा करना है। मुझे पता है कि आपने इसके विपरीत के लिए कहा था, लेकिन आपको कभी नहीं पता कि आपको चीजों को पूर्ववत करने की आवश्यकता है।
2 - आपके पास टैब हैं और रिक्त स्थान चाहते हैं।
सबसे पहले, तय करें कि आप अपने टैब को कितने रिक्त स्थान में बदलना चाहते हैं। कहते हैं कि आप चाहते हैं कि प्रत्येक टैब 2 रिक्त स्थान हो। आप तब करते हैं:
:set ts=2
:set et
:%retab!
यह तार के साथ एक ही समस्या होगी। लेकिन स्ट्रिंग्स के अंदर हार्ड टैब का उपयोग नहीं करने के लिए इसकी बेहतर प्रोग्रामिंग शैली के रूप में, आप वास्तव में यहां एक अच्छी बात कर रहे हैं। यदि आपको वास्तव में स्ट्रिंग के अंदर टैब की आवश्यकता है, तो उपयोग करें \t
।
sed "s/ +/`echo -e '\t'`/g" < input.py > output.py
) सभी रिक्त स्थान को परिवर्तित करने के लिए प्रकट होता है, न कि केवल अग्रणी स्थान। दूसरे उदाहरण (sed "s/^ +/`echo -e '\t'`/g" < input.py > output.py
) में यह केवल प्रत्येक पंक्ति पर एक टैब के साथ पहले स्थान को बदलता है और बाकी को छोड़ देता है।