এক ছুটির দিনে Vim শিখুন
13 Nov 2018 Bangla DUET, Bangladeshপ্রায় ৩০ বছর আগের একটা টেক্সট এডিটর, এখনো অনেক মানুষের প্রথম পছন্দ Vim এডিটরটি। এর একটি বিশেষত্ব হচ্ছে এটি উন্মুক্ত ও চ্যারিটিওয়্যার। মূলত প্রোডাক্টিভিটির জন্যই প্রোগ্রামাররা Vim ব্যাবহার করেন।
ফিলোসফিঃ
আমরা সচরাচর যে টেক্সট এডিটর গুলা ব্যাবহার করি সেসব টেক্সট এডিটর গুলো মূলত টেক্সট লেখার দৃষ্টিকোণ থেকে তৈরি কিন্তু Vim একাধারে টেক্সট লেখা ও এডিট এর দৃষ্টিকোণ থেকে তৈরি। Terminal এ vim <filename>
(যেমনঃ vim Prime.cpp
) কমান্ড দিয়ে একটি ফাইল এডিট শুরু করা যেতে পারে। Vim এ তিনটা মোড আছেঃ ইনসার্ট মোড, কমান্ড মোড বা নরমাল মোড, ভিজুয়াল মোড। Vim চালু হবার সাথে সাথে তা কমান্ড মোডে থাকে। ইনসার্ট মোডে যেতে হলে i
প্রেস করতে হবে, তাহলেই শুধুমাত্র লেখা যাবে। আবার কমান্ড মোডে আসার জন্য Esc
চাপতে হবে। Esc
চাপলে মূলত যেকোন মোড থেকে কমান্ড মোডে চলে আসবে। কমান্ড মোডে মূলত অনেক কমান্ড আছে, সুখের খবর হল কমান্ড তেমন মুখস্থ করতে হয় না, যেমনঃ delete
কমান্ডের জন্য d
, চেইঞ্জ কমান্ডের জন্য c
ইত্যাদি। আমাদের সবসময় Vim এর এ তিনটা মোডের কথা মাথায় রাখতে হবে, প্রথমে একটু কষ্ট কিন্তু পরে অভ্যাস হয়ে যায়। কখন কোন মোডে অছি তা Vim এর বাম-নিচ কোনে দেখা যাবে।
মনে রাখতে হবে, ইনসার্ট মোডে না থাকলে টেক্সট ইনসার্ট হবে না, কমান্ড মোডে না থাকলে কমান্ড কাজ করবে না। ভিজুয়াল মোড মূলত টেক্সট সিলেক্ট করে কপি, ডিলেট ইত্যাদি করার জন্য যা ভিজিয়াল মোডে না থাকলে কাজ করবে না। যেকোন মোডে থাকা অবস্থায় Esc
চাপলে তা আবার নরমাল মোডে বা কমান্ড মোডে চলে আসবে, টেক্সট ইনসার্টের দরকার হলে আবার i
দিয়ে ইনসার্ট মোডে যেতে হবে। ভিজুয়াল মোড সম্পর্কে জানার আগে নেভিগেশন ও কিছু কমান্ড জানতে হবে।
ফাইল সেইভ ও এক্সিটঃ
অনেকেই পুরো টিউটোরিয়ালটি পড়বেন না, তাই আগেই বের হবার রাস্থা দেখিয়ে দেই। Vim থেকে বের হওয়া নিয়ে প্রোগ্রামিং কমিউনিটিতে অনেক জোকস প্রচলিত আছে কারণ একটা নিউবির জন্য এখান থেকে বের হওয়া কঠিন।
ফাইল সেইভ করার জন্য কমান্ড মোডে এসে :w
কমান্ড দিতে হবে যার পূর্ণ অর্থ হচ্ছে এতক্ষন যা এডিট করলাম তা write
করবে। লক্ষণীয় বিষয় আমরা যদি vim <filename>
কমান্ড ছাড়া শুধু vim
কমান্ড দিয়ে ফাইল এডিট শুরু করি তাহলে শুধু :w
কাজ করবে না, :w <filename>
কমান্ড দিতে হবে তখন। Exit/Quit করার জন্য :q
কমান্ড যা একসাথে :wq
এর সাথেও ব্যবহার করা যায়। ফোর্স Exit এর জন্য :q!
কমান্ড, আশ্চর্যবোধক চিহ্ন দ্বারা ফোর্স বুঝানো হচ্ছে, ফাইল নেইম ছাড়া, ফাইল সেইভ না করে ফোর্স করে বের হওয়ার জন এই কমান্ড, লক্ষণীয় বিষয় Vim এর দিকে একটু খেয়াল রাখলে এই কমান্ডগুলে মুখস্থ করতে হয় না, Vim নিজেই বলে দেয় অনেকটা সময়।
নেভিগেশনঃ
Vim এর সবচাইতে কঠিন কাজ হল এই পার্টটি। কিছু পরিমাণ টেক্সট লেখা হলে তারপরঃ j
দিয়ে নিচে, k
দিয়ে উপরে, h
দিয়ে বামে, l
দিয়ে ডানে নেভিগেট করার জন্য ব্যাবহার করা হয়। এটা একটু প্রাকটিস করে শিখে নিতে হয়। অনলাইনে বিভিন্ন গেইম পাওয়া যায় Vim নেভিগেশন শিখার জন্য। এই h-j-k-l
এর আগে যেকোন একটি ইন্টেজার নাম্বার জুড়ে দিলে সে পরিমাণ নেভিগেশন হবে, মানে 5j
কমান্ড দিলে কার্সর ৫ লাইন নিচে যাবে। লক্ষণীয় বিষয় হচ্ছে এই h-j-k-l
কিন্তু একেকটা কমান্ড, তাই কমান্ড মোডে থাকতে হবে এই কমান্ড গুলো পরিচালনার জন্য।
কমান্ড মোডের কিছু কমান্ডঃ
কমান্ড মোডের গুরুত্বপূর্ণ দুইটি verb হচ্ছে delete এবং change. এগুলা একা একা ব্যবহার হতে পারে না, যেমন delete কে বলতে হয় কি ডিলিট করবে। delete এর জন্য d
কমান্ড। আমরা জানি 5j
দ্বারা ৫ লাইন নিচে কার্সর যাবে আমাদের, d5j
মানে হচ্ছে নিচের ৫ লাইন ডিলিট করবে। ডিলিটের আরও মজার মজার ক্ষমতা আছে। যেমন di{
কমান্ডের মানে হচ্ছে আমরা এখন যে { এর মধ্যে অছি, সেটার ভিতরের সব কিছু ডিলিট করে দিবে। এখানে d
কমান্ডের পরে i
কমান্ডের মানে হচ্ছে inside. উপরের কমান্ডটুকু ইংলিশে রূপান্তর করলে দাড়ায় delete inside {, যার মানে আমরা এখন যে { এর মধ্যে অছি তা সব ডিলিট করে দাও। এই { এর যায়গায় প্রথম, তৃতীয় ব্রাকেট সব ব্যবহার করা যাবে।
একসাথে কতগুলো লাইন যদি থাকে যাদের মধ্যে কোন খালি লাইন নাই তাদের প্যারাগ্রাফ বলে, dip
কমান্ড দিলে এমন এক প্রারাগ্রাফ ডিলিট হবে, dip
মানে হচ্ছে delete inside paragraph, মানে এই প্রারাগ্রাফের যেকোন স্থানে কার্সর থাকা অবস্থায় এই কমান্ড চাপলে এই কমান্ড কাজ করবে।
delete আর change প্রায় একই জিনিস, delete শুধু ডিলিট করাবে আর change ডিলিট করার সাথে সাথে ইনসার্ট মোডে চলে যাবে।
Vim এর হাজার হাজার কমান্ড আছে যা বলে শেষ করা যাবে না, Vim Cheat Sheet দেখে নিবেন, মজার বিষয় এই কমান্ড গুলো মুখস্থের জন্য নয়, কোডিং করতে করতে এগুলা হাতের মাথায় চলে আসে।
প্রায় সকল কোড এডিটরেই vim bindings পাওয়া যায় (such as VSCode Vim Extension), যেকোন কোড ইডিটরেই তাই নিশ্চিন্তে স্কিল ট্রান্সফার করা যাবে, প্লাস যারা সার্ভার এ টুকটাক কাজ করবেন, শুধু টার্মিনাল দিয়ে লাইন ইডিটিং টুল হিসিবেও vim কাজে লাগবে।