راهنمای استفاده از ادیتور قدرتمند وی‌آی – vi در لینوکس

امکان کار کردن در محیط زیبا و بصری سیستم‌عامل ممکنه برای آدم همیشه مهیا نباشه و یا زمان‌هایی آدم فاقد موس باشه و یا اینکه ادیتورهای گرافیکی اصلا به دلیل سنگینی اونها در کامپیوترهای قدیمی لود نشن یا اینکه اصلا خراب بشن! اما در این مواقع همیشه یک ادیتور قدرتمند به نام وی‌آی – vi یار شما می‌تونه باشه.
وقتی حرف از یک ادیتور قوی برای محیط لینوکس می‌زنیم، یعنی شما باید قادر باشید به مشاهده‌ی متون بپردازید و یا اونها رو ادیت کنید و در متن اصلی دخل و تصرفاتی داشته باشید و قادر به انتخاب بخشی از متن نیز باشید. اعمالی همچون کپی و پیست نیز از کارای ابتدایی هست که شما باید در اون بتوانید انجام بدید.
شما با کمک ادیتور وی‌آی و البته یک کیبرد قادر به انجام تمام کارهای بالا هستید. در ادامه قصد دارم با یک مثال عملی نحوه استفاده‌ی صحیح از این ادیتور قدرتمند رو به شما نشون بدم.

شروع

برای باز کردن یک فایل در ترمینال با ادیتور وی‌آی کافیست نام فایل را بعد از اسم این ادیتور بیاورید. تصور کنید قصد باز کردن فایلی با نام commands.html (می‌تونید این فایل رو دانلود کنید و با من گام‌به‌گام پیش بیایید) که در دایرکتوری خانگیتون هستش رو دارید. برای باز کردن فایل کافیست بعد از رفتن به دایرکتوری خانگی دستور زیر را وارد کنید.

vi commands.html

فایل به راحتی باز می‌شه و شما قادر هستید که محتوای اون رو ببینید. حالا فرض کنید که محتوای این فایل نوشته‌های زیر باشه.

حرکت به اطراف

حالا شما وارد فایل شدید و محتوای اون رو هم می‌بینید، اما چگونه می‌شه اون رو ادیت کرد؟ احتمالا موقعیت شما الان روی اولین حرف از محتویات فایل قرار داره! برای دیدن مکانی که الان هستید باید به اون مربع چشمک‌زن(برای من سبز رنگه) نگاه کنید که در ترمینال دیده می‌شه! اجازه بدید اسم این مربع چشمک‌زن رو که موقعیت شما در متن رو نشون می‌ده، به دلیل شباهت کارکردش به اشاره‌گر موس، اشاره‌گر vi بگذاریم. ما قصد داریم به سمت پایین حرکت کنیم تا به کلمه‌ی friend در متن برسیم.

برای تغییر اشاره‌گر vi دو راه پیش‌رو دارید. یکی استفاده از کلیدهای جهت‌دار کیبرد و دیگری استفاده از ۴ حرف کیبرد. استفاده از حروف روی کیبرد به دلیل سرعت بیشتر و همچنین به دلیل اینکه شما ممکنه ترمینال خودتون رو طوری تنظیم کرده باشید که کلیدهای جهت‌نما کار خاصی رو انجام بدن بیشتر توصیه می‌شه!! این چهار حروف هم به شرح زیر هستند.

برای پایین آمدن اشاره‌گر: j رو فشار بدید
برای بالا رفتن اشاره‌گر: K رو فشار بدید
برای رفتن اشاره‌گر به چپ: h رو فشار بدید
برای رفتن اشاره‌گر به راست: L رو فشار بدید

برای رسیدن به کلمه‌ی friend بایستی هشت بار حرف j را فشار دهیم تا به ابتدای خطی که friend در آن قرار دارد برسیم و برای رسیدن به خود کلمه‌ی friend بایستی کلید L را مکررا فشار دهیم و البته با چشم نیز اشاره گر را دنبال کنیم تا اینکه به ابتدای کلمه‌ی friend برسیم. تمام فایل‌هایی که شما با آنها سروکار دارید اینقدر کوچک نیستند و ممکن است با فایل‌هایی روبه‌رو شوید که شامل چند صد خط هستند. برای اینکه به موقعیت خود در ترمینال پی ببرید(الان رو حرف اول friend هستیم) کافیست به آخرین خط نگاه کنید. ۹,۳۳ بدین معنیست که اشاره‌گر (موقعیت شما) در خط ۱۹ و ۳۳مین کاراکتر از آن خط قرار دارد. برای رفتن به خطوط پایین‌تر شما می‌توانید از دستور کاراتر زیر هم بهره ببیرید.

line number:

به عنوان مثال برای رفتن به خط ۲۷ (خطی که با حرف q شروع می‌شود) کافیست دستور زیر را وارد کنید و ‍س‍پس اینتر را بزنید.

۲۷:

پاک کردن نوشته
کار دیگه‌ای که قصد انجام دادنش رو داریم رفتن به خط ۱۵ و پاک کردن خط اضافه‌ایست که با حرف x شروع می‌شود.

برای پاک کردن خود حرف x بایستی کلید x از روی کیبرد را فشار دهید(یکبار دیگر نیز حرف x را فشار دهید تا هوای موجود نیز از بین برود و اشاره‌گر بر روی حرف m از کلمه‌ی more قرار گیرد)‌!! اما کار جالب‌تر اینه که شما کلمه‌ای رو که اشاره‌گر روی اون قرار داره پاک کنید.(یعنی more) برای اینکار کافیست dw رو بزنید. به محض وارد کردن این دو حرف کلمه‌ای که اشاره‌گر بر روی آن قرار دارد به ملکوت اعلا خواهد پیوست. برای حفظ کردن این دستور هم کافیه که بدونید dw مخفف delete word و به معنی پاک کردن لغت هستش.
دقت کنید که ادیتور وی‌آی فاصله‌ها را نیز به عنوان یک کلمه به حساب می‌آورد و شما برای پاک کردن کامل این خط باید نه بار dw را فشار دهید و یا اینکه با زدن دو حرف dd کل یک خط را به یکباره پاک کنید! و چون سریع‌ترین کار همینست پس من برای پاک کردن این خط از dd که اشاره‌‌گر هم روی آن مستقر شده,استفاده می‌کنم.

جایگذاری یک متن
فایلی که الان من دارم بدین شکل دراومده.

حالا هم قصد داریم کلمه‌ی غلط tect (باید بشه text) را اصلاح کنیم! برای اینکار چهار خط باید بالا برم(چهار بار k رو می‌زنم)‌ و بعد باید به سمت راست برم(تمام مسیر رو برای رسیدن به کلمه‌ی مورد نظر انگشتم رو روی L می‌فشارم!) تا اینکه اشاره‌گر روی حرف c از کلمه‌ی tect قرار بگیرد.

حالا حرق r از روی کیبورد رو می‌زنم(با زدن این حرف شما به ادیتور می‌گویید که قصد عوض کردن یک حرف رو دارید) و سپس حرف x رو می‌زنید(برای اصلاح کلمه به text). اگر مجددا فصد اصلاح کلمه به test رو داشتیم باید مجددا حرف r رو فشار بدیم و سپس حرف s رو بزنیم.

اضافه کردن متن
تا به حال در تمام این مدت ما در حالت ویرایش (edit mode‌) قرار داشتیم! در این حالت شما قادر به جابجاکردن اشاره‌گر در متن، پاک‌کردن و یا جابجایی یک حرف از متن هستید.
برای اضافه کردن متن ما باید به حالت دیگری موسوم به insert mode(حالت متن) برویم. خوشبختانه اینکار اصلا سخت نیست و شما ابتدا باید اشاره‌گر را به جایی که قصد اضافه‌کردن متن خود را دارید برده و سپس برای تغییر حالت حرف i را فشار دهید و شروع به تایپ کنید.
به جمله‌ی زیر توجه کنید.

اشاره‌گر بر روی حرف v از کلمه‌ی overwrite قرار دارد . شما با زدن حرف i به حالت متن (insert mode) می‌روید و saved file را می‌نویسید. توجه کنید تمام حروفی که شما وارد می‌کنید به عقب حرفی که اشاره‌گر در آن قرار دارد، اضافه می‌شود و متن به حالت زیر در می‌آید.


اما اگر ما بخواهیم saved file را بعد از کلمه‌ی last وارد کنیم ابتدا باید کلید اسکیپ(Esc) را فشار دهیم تا وارد حالت ویرایش شویم! و سپس اشاره‌گر را بین دو کلمه‌ی last و version آورده . سپس i را فشار داده تا وارد حالت متن شویم و سپس یک space می‌زنیم تا فاصله‌ای ایجاد شود و حالا  saved file را وارد می‌کنیم.
توجه: شما از کلیدهای h,j,k,l برای جابجایی در متن در حالت متن نمی‌توانید استفاده کنید. برای رفتن به حالت ویرایش باید Esc را فشار دهید.
هر موقع که در ادیتور وی‌آی یادم می‌ره که در کدام حالت هستم، قبل از انجام هر کاری خیلی راحت Esc رو فشار می‌دم تا به حالت ویرایش برم (‌این فراموشی برای همه پیش می‌یاد).

بازگشت به چند مرحله قبل

بگزارید حالتی رو ببینیم که شما فراموش می‌کنید که در حالت متن هستید و همینطوری شروع به زدن کلیدهای کیبرد می‌کنید (به گمان اینکه در حالت ویرایش هستید قصد وارد کردن چند دستور را دارید) و ناگهان متوجه می‌شید که فاجعه‌ای رخ داده! شما مجبور نیستید که تمام حروفی را که به اشتباه وارد کردید تکی‌تکی پاک کنید. شما می‌توانید از فن ماسمالی بهره ببرید و کل اشتباهتان را به یکباره پاک کنید. برای اینکار ابتدا Esc را بزنید تا به حالت ویرایش وارد شوید و حالا u (مخفف undo) را وارد کنید. با آنجام این کار آخرین گندی که زدید به صورت کامل پاک می‌شود. این بازگشت به مراحل قبل رو چندین بار می‌شه انجام داد که البته من آمارش رو ندارم!

دستکاری فایل
تا اینجا شما یک فایل رو باز کردید و متون اون رو تغییر دادید و یا متنی رو به اون اضافه کردید.اعمال دیگری همچون دخیره‌‌کردن فایل,  بازیابی اون و یا خارج شدن از آن را فقط در حالت ویرایش می‌توان به فایل اعمال کرد. پس اگر مطمئن نیستید در کدام حالت قرار دارید Esc را بزنید تا وارد حالت ویرایش شوید.
تمام کاری که برای ذخیره‌ی فایل باید انجام دهید وارد کردن !w: و زدن اینتر هست. (w مخفف write و به معنی نوشتن هستش)


حالا تصور کنید یه فایلی رو دوساعتی دستکاری کردید اما دوست دارید که فایل اولیه رو ببینید و قید تمام اون کارایی رو که کردید بزنید. کافیست !e: در حالت ویرایش بنویسید.


اگرم از اون تغییراتی که در فایل ایجاد کردید هراسان هستید و حال دست و پنجه نرم کردن با فایل اولیه رو هم ندارید برای خروج از فایلی که در اون هستید کافیست دستور !q: رو وارد کنید. با اینکار شما به ترمینال بر می‌گردید. فایلی هم که در حال دستکاری بودید از دست شما سالم باقی می‌مونه. در ضمن q هم مخفف کلمه quit به معنی خروج هستش.

با وارد کردن دستور !wq: هم شما از فایل خارج می‌شید اما اگه تغییراتی در فایل ایجاد کرده باشید در فایل اصلی ذخیره می‌شود!! در ضمن علامت تعجب هم به معنی نوعی هشدار می‌تونه تلقی بشه و فکر کنم علتش بعدا بیشتر براتون روشن بشه .


برای دخیره کردن فایل به اسم دیگر نیز کافیست دستور زیر را وارد کنید.

اولین حرف که همون معنی نوشتن یا همون دخیره کردن رو می‌ده ! دومین حرف یعنی % معرف و نماینده نام کنونی فایل شما هست (در مثال ما %=commands.html). اسم کنونی فایل هستش. در مثال ما فایل به اسم commands.html.salam در همون دایرکتوری فایل اصلی ذخیره می‌شه.
یا می‌شه نوشت
wsalam:
فایل شما به اسم salam ذخیره می‌شه!
یا اینم می‌تونه جالب باشه!
w.salam:
فایل شما به اسم .salam دخیره می‌شه و چون اول فایل با نقطه شروع شده مخفی هم هستش و شما در حالت عادی دیگه اون ذو نمی‌تونید ببینید.
حکمت علامت تعجب: اگرم به جای اسم فایل علامت تعجب بزارید یعنی دارید روی فایل اصلی مطلبتون رو دخیره می‌کنید و دیگه فایل اصلیه که پرپر می‌شه و این یعنی هشدار !! دیدید این نامگذاری‌ها چقدر براساس منطق هستش !
حالا فکر کنید می‌خواید خط اول تا بنجم یه فایل رو به یک اسم جدیدی ذخیره کنید !!‌ (من از قدرت فوق‌العاده بالای وی‌آی در حال غش کردن هستم!!)
L1,L2w newfile:
L1شماره شروع خط L2 شماره پاپایانی خط و newfile هم هر اسمی که عشقتون می‌کشه.
۱,۱۰w salam:
حالا به همین دستور بالا می‌هشه یه q ناقابل هم اضافه کرد تا بعد از ذخیره‌ی خطوط مورد نظر از فایل هم خارج بشید و وارد ترمینال بشید.
۱,۱۰wq salam:
حالا در نظر بگیرید در حالی که شما در حال ویرایش متن هستید برق می‌ره و شما اعصابتون داغون می‌شه و موهای بدنتون رو می‌کشید و لعنت به شانس بدتون می‌گید . اما نگران نباشید. وی‌آی فکر ایجا رو هم کرده. کافیه وقتی برق اومد وارد ترمینال بشید و بعد دستور زیر رو وارد کنید.
vi -rcommands.html


دفت کنید که آپشن -r که مخفف recovery هست باید به اسم فایلی که در حال ویرایش اون بودید بچسبه !!‌
حالا تصور کنید می‌خواید وارد همین فایلی شید که من بهتون دادم. اما سر خطی می‌خواید فایل باز بشه که دارای لغت means هست!‌ خوب خیلی راحت می‌نویسید
vi +/means command.html

پرواز در بین متون
شما رو با اون ۴ تا کلید اصلی که در حالت ویرایش کار می‌کنن آشنا کرذم (h,j,k,l) . اما اینا تازه اولشه و کجاش رو دیدین؟! با کلیک بر روی w که اینجا می‌شه مخفف کلمه word به معنی لغت, اشاره‌گر شما لغت به لغت در متن پیش می‌ره. b هم شما رو لغت به لغت به عقب راهنمایی می‌کنه! برای فرود آمدن به آخر هر کلمه‌ای کافیه حرف e که مخفف end هست رو بزنید. (دقیقا بر عکس w که با زدنش اشاره گر به اولین حرف از هر کلمه‌ می‌پره).
اگر می‌خواید که به اول اولین جمله‌ی بعدی پرواز کنید از ( استفاده کنید و اگر می‌خواهید به اول جمله‌ی قبلی بازگردید از ) استفاده کنید. برای رفتن به اولین پارگراف بعد و یا قبل از اشاره‌گرتون به ترتیب از [ یا ] استفاده کنید.
طراحان برنامه به فکر همه چی بودن. قبلا گفتم که وقتی در حالت ویرایش هستید با زدن i به حالت متن می‌رید. در این حالت وقتی مطلب رو تایپ می‌کنید مطالب در عقب حرفی که اشاره‌گر روی اون فرار داره ظاهر می‌شه. حالا اینبار وقتی در حالت ویرایش هستید a رو بزنید تا وارد حالت متن شوید. مطالبی که می‌نویسید اینبار در جلوی حرفی که اشاره‌گر روی اون قرار داره ظاهر می‌شه و از همه اینها جالب‌تر اینه که هنگام رفتن به حالت متنی با کلید o مطالب شما در خطی جدید و البته زیر همان خطی که اشاره‌گر وجود دارد ظاهر می‌شوند!!
جستجو و جایگذاری
برای جستجوی کلمه‌ای در متن فقط کافیه از دستور زیر استفاده کنید.
string/:
که string همون کلمه‌ای هست که مورد نظر شماست و شما در متن دنبال اون می‌گردید.
با وارد کردن این دستور ادیتور دنبال اولین لغتی که بعد از مکان اشاره‌گر قرار داره می‌گرده. برای جستجوی بقیه متن مجبورید دستور رو دوباره وارد کنید.
حالا اگر بخواهید که ادیتور لغت مورد نظر شما در متن را در عقب اشاره‌گر بگردد کافیست دستور زیر را وارد کنید.
string?:
و اما یکی از شاعرانه‌ترین دستورات. می‌خوایم توی همون متن اصلیمون هرجایی کلمه‌ی means داریم رو پیدا کنیم و جای اونها کلمه salam رو بنویسیم. خیلی ریلکس دستور زیر رو می‌نویسیم
g/means/s//replace-term salam/g:


علارغم ظاهر زمخت، این دستور کار می‌کنه. اگر هم  روش یه خورده فکر و اندیشه کنید می‌بینید توی ترمینال راحت‌تر از اینم نمی‌تونست باشه!
بریدن و چسباندن
حالا نوبت نوبت ژانگولر کاریه! توی ترمینال می‌خوایم عمل معروف کپی‌پیست رو انجام بدیم!‌ می‌‌ریم سراغ یکی از جملات معروف خودمون. توی جمله‌ی زیر، لغت escape رو می‌خوایم cut کنیم.

ابتدا اشاره‌گر رو روی لغت مورد نظر قرار می‌دیم و مثل سابق که می‌خواستیم یک لغت رو پاک کنیم dw رو می‌زنیم. حالا اشاره‌گر رو جایی که می‌خوایم اون رو پیست کنیم می‌بریم و حرف p (مخفف پیست) رو می‌زنیم.حالا اشاره‌گر رو بین دو کلمه‌ی your و friend می‌بریم و ایندفعه p رو می‌زنیم. جمله‌ی ما باید به صورت زیر در بیاد.


برای عمل کپی‌پیستم کافیه که به جای dw که لغت رو پاک می‌کنه و البته توی حافظه هم می‌سپره از yw استفاده کنید. توی ادامه‌ی مثالمون ما می خوایم کلمه‌ی friend رو توی حافظه کنیم. خوب خیلی راحت اشاره‌گرو روی f می‌یاریم و بعد yw رو می‌زنیم. بعد می‌ریم یه جای خالی و p رو می‌زنیم.
در ضمن yw مخفف yank word هست که اینم به معنی تکان شدید لغت هستش!‌ حالا می‌تونید این yankکاری‌ها رو توسعه هم بدید! ‌yy باعث می‌شه که یک کپی از خط به حافظه منتقل بشه و اما در ادامه به یک شاهکار می‌رسیم!!  همون مثال اصلی رو در نظر می‌گیریم. اگه یادتون باشه متن ما دو تا جمله‌ی دقیقا مثل هم داشت که با x هم شروع می‌شدن! خوب اشاره‌گر رو بین این دو خط می‌یاریم. حالا ما می‌تونیم هم کل متنی که بالاسرمون (نه بالای کله‌ی من، بالا سر اشاره‌گر شما) قرار داره رو به حافظه بسپریم و هم می‌تونیم کل متنی رو که پایین اشاره‌گر قرار داره رو به حافظه بسپاریم!‌ برای کار اول یکبار حرف y رو فشار می‌دیم و بعد دوبار ] می‌فشاریم. اصلا هم نیازی نیست که شیفت رو بگیرید! وقتی این عمل رو انجا می‌دید اون پایین ادیتور به شما پیغام می‌ده که مثلا ۱۵ خط به حافظه سپرده شد.

برای اینکه متون پایین اشاره‌گر رو به حافظ بدید هم یکبار y رو می‌زنید و بعد دو بار اون یکی کلید متضاد رو فشار می‌دید. یعنی [ !! البته بازم بدون شیفت. ادیتور برای من پیغام می‌ده که ۱۶ خط رو به حافظه سپرده.

و بعد هر جایی هم که خواستید p رو می‌زنید تا عمل چسباندن خطوط ذخیره شده در حافظه صورت بگیره.

و اما چند نکته‌ی جالب و کاربردی از کتاب آموزش لینوکس ردهت ۹ آقای آلن باغومیان

با وارد کردن دستور !: و بلافاصله بعد از آن وارد کردن دستور مورد نظر خود در لینوکس می‌توانید از داخل محیط ادیتور vi نیز اقدام به اجرای آن دستور نمایید. پس از زدن کلید اینتر دوباره به ادیتور باز خواهید گشت.

با تایپ !bach نیز می‌توانید در داخل ادیتور vi یک پوسته‌ی فرمان برای خود باز کرده و درون آن کار کنید! برای خارج شدن از پوسته و بازگشت به ادیتور vi نیز کافیست از دستور exit استفاده نمایید.
در صورت استفاده از شماره‌ها در کنار فرمان‌ها نیز آن دستور به تعداد آن عدد تکرار خواهد شد.
۳wd: سه کلمه‌ی بعدی را پاک می‌کند.

و در فایل‌های بسیار بزرگ نیز می توانید برای رفتن به صفحات مختلف آن از کلیدهای میانبر زیر استفاده نمایید.

کنترل + f: یک صفحه به جلو می‌رود.
کنترل + b: یک صفحه به عقب باز می‌گردد.
کنترل + d: نیم‌صفحه به جلو می‌رود.
کنترل + u: نیم‌صفحه به عقب باز می‌گردد.

قصه‌ی ما به سر رسید کلاغه به خونش نرسید.

دیدگاه‌ها

8 پاسخ به “راهنمای استفاده از ادیتور قدرتمند وی‌آی – vi در لینوکس”

  1. anonymous نیم‌رخ
    anonymous

    its like a vax station! dude

  2. کاربر تازه کار لینوکس نیم‌رخ

    ممنون از توضیحات بسیار مفید شما.

  3. مجید نیم‌رخ
    مجید

    خیلی خیلی عالی بود با تشکر خیلی زیاد – واقعآ عالی بود – نمی دوتستم این ادیتور اینقدر کارآیی داره – خیلی به دردم خورد در لینوکس – عذا گرفته بودم در وی-آی چطور بتونم کپی-پیست کنم . بازم ممنون .

  4. محمد نیم‌رخ
    محمد

    خیلی ممنون از مطالب مفید و عالی شما واقعا عالی بود همچنین نوع بیان شما دلچسب و لذت بخش بود و

    باعث میشد در موقع خواندن خسته نشیم.

    موفق و پیروز باشید

  5. ahl نیم‌رخ

    agha daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamet gharm vase tahghigh mikhastamesh

  6. […] نقل از : ilinux دسته هانوشته های من برچسب ها:editor, linux, terminal, ubuntu, vi, […]

  7. رضا نیم‌رخ
    رضا

    it’s just perfect

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *