vim_intro

ভিম নিয়ে ঘষাঘষি!

আমার আমি :::‌‍ প্রোগ্রামিং ::: পড়াশুনা

এটা সতেজ ভাইর মাইক্রোসফটের ইন্টারভিউর গল্প।

সতেজ ভাইকে এইচ আর এর একজন ফোন করলো। প্রথম প্রশ্ন - তুমি কি রেফারেন্স ছাড়া কোড করতে পারো? সতেজ ভাই ভ্যাবাচ্যাকা খেয়ে বলল," হুমম পারি! রেফারেন্স ছাড়াই তো কোড লিখি।" কিছুক্ষণ আরো কথা বার্তা বলে তারপর জিজ্ঞেস করলো, তা তোমার সবচে' প্রিয় সফটওয়্যার কি? সতেজ ভাই তখন মাত্র ভিম ব্যবহার করা শুরু করেছে। তো সতেজ ভাই বলল, "ভিম!"

এবার ইন্টারভিউ নেয়া লোকটা ভ্যাবাচ্যাকা খেল। সে আশা করছিল, সে শুনবে, মাইক্রোসফট অফিস, ম্যাথম্যাটিকা, ফটোশপ বা এধরণের কিছু। সে একটু থামলো।

তারপর বলল, "ভিম? সেটা আবার কি?"

--- এই গল্পটা বলার মূল উদ্দেশ্য ছিল তোমাকে বলা, যে ভিম কতটা অখ্যাত একটা সফটওয়্যার। তোমাকে এরপর যদি আমি বলি, যে ভিম ফ্রি দেয়া হয়, ভিম কিনতে হয় না, কোন পয়সা লাগে না ভিম ব্যবহার করতে, তাহলে তুমি হয়তো ভাববে ভিম চরম ফকিরা। এমনিতেই কেউ চিনে না, তার উপর আবার মাগনা জিনিস! মাগনা দেয়ার পরও কেউ চিনে না। বেশ তো, আমি তোমাকে যখন এক চুটকিতে বোঝাতে পারবোই না ভিম কতটা জোশ একটা জিনিস, তো আমি ভিম এর গুণগান গাওয়াই শুরু করি।

ভিম দিয়ে প্রচন্ড দ্রুত মুভ করা যায় এবং প্রচন্ড দ্রুত কাজ করা যায়। ধরো তুমি একটা লাইন লিখছে বসে বসে - তুমি এখন লাইনের শুরুতে যেতে চাও। সাধারণ একটা এডিটরে তোমাকে কি করতে হবে? ইতিউতি করে প্রথমে তোমার মাউসটাকে খুঁজতে হবে, তারপর মাউসের কার্সরটাকে লাইনের শুরুতে টে-এ-নে নিয়ে আসতে হবে - অথবা - < অ্যারো কিটাকে অনবরত টেপাটেপি করতে হবে যতক্ষণ না সেটা লাইনের প্রথমে যায়! ভিমে, ব্যাপারটা খুব সহজ, আমি শুধু Esc চাপবো, তারপর চাপবো 0 - ব্যাস! আমার কাজ শেষ। আমার পুরো কাজটা করতে এক সেকেন্ডও লাগবে না। তারপর ধরো তুমি একটা লাইন মুছতে চাও, তোমাকে সাধারণ এডিটরে পুরো লাইন অনেক কষ্ট করে সিলেক্ট করতে হবে, তারপর রাইট ক্লিক করে ডিলিট সিলেক্ট করতে হবে, কিংবা কিবোর্ড থেকে খুঁজে টুজে ডিলিট বাটনটা বের করে ধাম করে একটা চাপ দিতে হবে। ভিমে এর কিছুই করা লাগে না। আমি যদি ওই লাইনটার উপর থাকি, আমার কাজ হচ্ছে শুধু Esc চাপা তারপর dd চাপা।

তুমি যদি দশ আঙ্গুলে টাইপ করতে পারো - যেটাকে সবাই বলে টাচ টাইপিং - তাহলে তুমি বুঝবে এই কাজটা করতে কত কম সময় লাগে। ভিমের বেশিরভাগ কাজ হচ্ছে সবচে কাছের Keyগুলো ব্যবহার করে, আমরা ভিমে নিচে যাই j চেপে, উপরে যাই k চেপে। এগুলো সব হচ্ছে টাচ টাইপিং এ হাত বসানোর জায়গার উপরে, সেই তুলনায় অ্যারো Keyগুলো বেশ দূরে। তারপর ভিমে প্রচুর শর্টকাট আছে। আমার যদি ধরো ৩০ লাইন নিচে যাওয়া লাগে, আমি কিন্তু ৩০ বার অ্যারো কি চাপবো না। আমি মাউস ও খুঁজবো না, আমি শুধু Esc চাপবো, তারপর একবার Ctrl+d মারবো।

উমম.. আমি কি লোভ দেখাতে পারছি? এবার কিছু সত্যি কথা বলি - ভিম একদমই ইউজার ফ্রেন্ডলি না, এমনকি ভিম খুব দ্রুত শেখাও যায় না। তারপর সারা জীবণ অ্যারো কিদের নিয়ে মারামারি করতে করতে হঠাৎ করে যখন কাওকে hjkl ব্যবহার করে ওঠা নামা করতে বলা হয়, সেটা তার কাছে তৈলাক্ত বাঁশ বেয়ে ওঠানামা করার মতোই পেইন লাগে। কিন্তু তুমি যখন ভিম ব্যবহার করতে শুরু করবে, এবং বুঝতে পারবে তুমি কত দ্রুত কোড করতে পারছো, তখন তোমার বাকি সব এডিটর মোটামুটি ভ্যানদা লাগবে।

--- লিনাক্সে ভিম ব্যবহার "শুরু" করা বেশ সহজ। বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনের সাথে ভিম ফ্রি আসে। উবুন্টুর জন্য ভিম এর কমান্ড হলো gvim a.cpp আর ফেডোরার জন্য vi a.cpp এখানে a.cpp হচ্ছে সেই ফাইলটা যেটা নিয়ে তুমি কাজ করছো। ভিম কিন্তু শুধু একটা এডিটর। কম্পাইল করার জন্য তোমার g++ ইন্সটল করা লাগবে। যেটা ফেডোরার সাথে এমনিই আসে আর উবুন্টুতে লিখতে হয় sudo apt-get g++ আর এরপর কোন কোড কম্পাইল করার জন্য শুধু লেখা লাগে g++ code.cpp যেখানে code.cpp হলো তোমার কোডের নাম। রান করতে লেখা লাগে ./a.out তুমি যদি একটা ইনপুট ফাইল একে খাওয়াতে চাও তাহলে ফ্রিওপেন ছাড়াই কাজটা করা যায় শুধু ./a.out < data লিখে, যেখানে data ধরো তোমার ইনপুট ফাইলের নাম।

উইন্ডোস এ কাজ করার জন্য তোমাকে জিভিম নামাতে হবে এখান থেকে। তুমি যদি অন্য কোন কম্পাইলর ব্যবহার করে কম্পাইল করতে চাও, তুমি স্বাধীণ! কিন্তু বেশিরভাগ অনলাইন জাজ, ওয়ার্ল্ড ফাইনালস, আইওআই, বড় যেকোন কন্টেস্ট g++ বা gcc এধরণের কম্পাইলর ব্যবহার করে, আর উইন্ডোজ এ শুধু ডেভ সিপিপি সেটা সাপোর্ট করে। আবার ডেভ %lld সাপোর্ট করে না। তো সবচে ভালো হয় তুমি যদি সিগউইন ব্যবহার করো - এখান থেকে দেখে নিতে পারো কিভাবে ইন্সটল করতে হয় সিগউইন - মনে করে g++ সিলেক্ট করিয়ো - ভিডিওতে সেটা দেখায়নি। এরপর আরেকটা ছোট কাজ করা লাগে, সিগউইন সেট আপ করার জন্য - মাই কম্পিউটার এ রাইট ক্লিক করে অ্যাডভান্স এ গিয়ে এনভায়রনমেন্ট ভ্যারিয়েবলে একটা নতুন ভ্যারিয়েবল অ্যাড করতে হয় - PATH হল সেটার নাম আর অ্যাডরেস হলো, যেখানে তুমি সিগউইন ইন্সটল করেছো সেটা, যেমন আমারটায় c:\cygwin\bin ।

তাহলে তুমি একটা লিনাক্স কোর পেয়ে যাচ্ছো তোমার উইন্ডোস মেশিনে। ভিম নিয়ে এই কাজগুলো করা হয়ে গেলেই তুমি এক্সপেরিমেন্ট করতে শুরু করতে পারো।

ভিম ব্যবহার করতে শেখা অনেকটা হাঁটা শেখার মতো। তো তুমি যদি ধুপুশ করে পড়তে পড়তে ভাবো, যে তোমার জন্য সাধারণ এডিটরই ভালো, তাহলে তুমি ফিরে যেতে পারো, কিন্তু আমি বলব, তুমি যদি সিরিয়াস ফাস্ট একটা কোডার হতে চাও, আর খামাখা অ্যারো কি চেপে চেপে বুড়ো হয়ে যেতে না চাও - তাহলে একটু হোঁচট খাও! আমি চাইলে ভিম নিয়ে আরো বকবক করতে পারতাম, কিন্তু অনেক মানুষ প্রচুর বকবক করে গেছে। ভিম শুরু করার জন্য এটা খুব ভালো পোস্ট। আর এটাও একটা বস লেখা। এসব পড়ার পর শুধু মনে করার জন্য এই চিট শিটটা দেখতে পারো।

আশা করো না, যে তুমি একবার পড়েই ভিমের অদ্যোপান্ত সব জেনে যাবে। প্রথমে hjkl আর মোডগুলোর সাথে অভ্যস্ত হও তারপর ধীরে ধীরে বাকি জিনিসগুলো একটু একটু করে শিখে ফেলো। এটা হচ্ছে আমার ভিম কনফিগারেশন ফাইল। এটা সেট করার জন্য উইন্ডোজ এ গিয়ে তোমাকে খুঁজে বের করতে হবে _gvimrc ফাইলটা, যেটা আছে ডকুমেন্ট অ্যান্ড সেটিঙস এ ইউজারের নামের ফোল্ডারে। যদি না থাকে - তৈরি করে নাও - অথবা এই ফাইলটাই কপি মারো সেখানে। আর লিনাক্সে তুমি .vimrc ফাইলটা খুলতে পারো টারমিনাল খুললে যেই উইন্ডোটা আসে সেখান থেকে। এটা হলো কনফিগারেশন ফাইল। তুমি তোমার মতো করে কাস্টোমাইজ করে নিতে পারো।

আমারটায় F5 ( কমান্ড মোডে ) চাপলে কম্পাইল+রান হয়, আর F6 চাপলে সে কম্পাইল করে রান করে তারপর input.txt থেকে ইনপুট নিয়ে শুধু আউটপুট দেখায়। তবে - তুমি যদি এটা উইন্ডোজ এ করতে চাও তোমার অবশ্যই সিগউইন লাগবে আর অবশ্যই g++ থাকতে হবে। আরো ভিম টিপস এর জন্য এখানে ঢু মারতে পারো। শুভ কামনা ভিম নিয়ে ঘষাঘষি করার জন্য! ;)

পুনশ্চ: এই টিউটোরিয়ালটা অ্যাডভান্সড প্রোগ্রামারদের জন্য। তুমি যদি কিছুই না বোঝ, কোন সমস্যা নেই! বুড়ো হবার জন্য অপেক্ষা করো! ;)

পুপুনশ্চ: আমি লিনাক্সফোরামে এটা পড়েছিলাম, আমার খুব ভাল লেগেছিল।

Wake up and take the red pill, micro$hit junkies!

writen by: david_p on 2009-10-20 19:00:17

I've been using Vim for a about 3 years and everyday i learn some incredible feature. It's just a world apart from anything else. No dum notepad or ultraedit can even compare (and i've used both and many more).

I guess it has to do with the way you think about editing text. Either in a logic and efficient way, or like a stupid chicken pressing those arrow keys time after time after time after time...

I understand the argument that people don't see the need for vim, because once i was like that. It was not until i got a chance to really work on unix boxes on a day by day basis that i started to appreciate the beauty of it. I can only feel sorry for those who never had the chance that i had and keep swimming happy and ignorant in the microshit bloated sea. Like anything in life, different experiences contribute to a richer vision of things. Saying that you prefer to use menus and the mouse to edit text reminds of the ostricht that sticks her head in the sand to ignore what goes on around her. Try looking for them when you're editing a python script, via ssh on a solaris box. Oh, but you don't use ssh or python right?...(but you do use ssl don't you?).

And for your information you don't have to memorize commands in vim. All you have to do is use your brain and know how to use the help system. Most commands can be combined logically to perform most tasks in an efficient way. cw=change word dw=delete word 2dw=delete 2 words...get the ideia?...

I prefer to type 13dd to delete 13 rows than to hammer that poor down arrow 13 times and finally pressing delete, but it's your choice...

Don't feel bad, just take the blue pill and everything will be allright again...

Ignorance is a bliss.......

Version 2 - সর্বশেষ এডিট - ডিসেম্বর ২১, ২০০৯