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 টি স্পেস দ্বারা অনুসরণ করা যেকোনও ট্যাব দিয়ে শুরু হওয়া যে কোনও লাইনটির জন্য পুরো ফাইলটিতে সন্ধান করবে এবং এটি যে কোনও সংখ্যক ট্যাব এবং এক খুঁজে পাওয়া যাবে তার জন্য এটি প্রতিস্থাপন করবে।
দুর্ভাগ্যক্রমে, এটি একবারে চলবে না!
প্রথমে, ফাইলটির ফাঁকা জায়গা দিয়ে শুরু হওয়া লাইন থাকবে। অনুসন্ধানের পরে কেবল প্রথম 4 টি স্পেসকে একটি ট্যাবে রূপান্তরিত করা হবে এবং নিম্নলিখিতটি দেওয়া যাক ...
আপনাকে আদেশটি পুনরাবৃত্তি করতে হবে। কতবার? যতক্ষণ না আপনি একটি pattern not found
। আমি প্রক্রিয়াটি স্বয়ংক্রিয় করার কোনও উপায় সম্পর্কে ভাবতে পারি না। তবে আপনি যদি:
`10@:`
আপনি সম্ভবত সম্পন্ন হয়েছে। এই কমান্ডটি 10 বারের জন্য সর্বশেষ অনুসন্ধান / প্রতিস্থাপনের পুনরাবৃত্তি করে। এটি সম্ভবত আপনার প্রোগ্রামে অনেকগুলি ইনডেন্ট থাকবে না। যদি এটি থাকে তবে কেবল আবার পুনরাবৃত্তি করুন @@
।
এখন, উত্তরটি সম্পূর্ণ করার জন্য। আমি জানি আপনি বিপরীতে চেয়েছিলেন, তবে কখন কখন জিনিসগুলি পূর্বাবস্থায় ফেলার দরকার তা আপনি জানেন না।
2 - আপনার ট্যাব রয়েছে এবং স্পেস চান।
প্রথমে আপনি নিজের ট্যাবগুলিতে রূপান্তর করতে চান তা কতগুলি স্পেসে স্থির করুন decide বলুন আপনি প্রতিটি ট্যাবটি 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
) এটি কেবল প্রতিটি লাইনের প্রথম স্থানটিকে একটি ট্যাব দিয়ে প্রতিস্থাপন করে এবং বাকি অংশটি ছেড়ে দেয়।