در آموزش نحوه کار کردن با ویرایشگر vi در لینوکس، میخواهیم به سراغ یکی از قدیمیترین و در عین حال قدرتمندترین ویرایشگرهای متنی لینوکس یعنی vi برویم، ابزاری سبک، سریع و همیشه در دسترس که تقریبا در تمام توزیعها به صورت پیشفرض وجود دارد.
اگرچه محیط ساده و کاملا متنی آن در نگاه اول کمی خشن و سخت به نظر میرسد، اما وقتی منطق حالتها و چند دستور پایه را یاد بگیرید، vi به ابزاری فوقالعاده کاربردی برای مدیریت سرور، ویرایش فایلهای سیستمی و انجام کارهای روزمره تبدیل میشود. در این مقاله قرار است با زبانی ساده، مفاهیم اصلی vi را توضیح دهیم تا بدون ترس بتوانید آن را باز کنید، فایلها را ویرایش و تغییرات را ذخیره یا خارج شوید.

ویرایشگر vi چیست و چه کاربردی دارد؟
ویرایشگر vi به خاطر سرعت بالا، مصرف کم منابع و امکان استفاده در محیطهای بدون رابط گرافیکی، یک انتخاب عالی برای مدیران سرور و کاربران حرفهای است. ساختار حالتهای مختلف در vi در ابتدا ممکن است کمی عجیب به نظر برسد، اما وقتی با منطق آن آشنا شوید میتوانید به سرعت فایلهای سیستمی، اسکریپتها و تنظیمات را ویرایش کنید و تغییرات را با چند دستور ساده ذخیره یا خارج شوید.
به طور خلاصه کاربردهای vi عبارت است از:
- ویرایش فایلهای سیستمی و تنظیمات سرور
- ویرایش سریع فایلهای متنی در محیط ترمینال
- استفاده در شرایطی که محیط گرافیکی در دسترس نیست
- مناسب برای مدیران سرور، برنامه نویسان و کاربران حرفهای
- سرعت بالا و سبک بودن نسبت به ادیتورهای گرافیکی
حالتهای مختلف در ویرایشگر vi
اگر نحوه کار کردن با ویرایشگر vi در لینوکس را یاد بگیرید، مدیریت فایلهای سیستمی و کارهای روزانه در ترمینال چند برابر سریعتر و حرفهایتر میشود. اساس کار vi روی سه حالت اصلی استوار است که هرکدام وظایف و دستورهای مخصوص خودشان را دارند.
حالت Command در ویرایشگر vi
حالت Command نقطه شروع و اصلیترین بخش ویرایشگر vi در Linux است. وقتی فایل را باز میکنید، در همین حالت قرار دارید و در این مرحله نمیتوانید متن تایپ کنید. در عوض، تمام دستورهای کنترلی مانند جابهجایی در متن، حذف، کپی، بریدن، جستجو، انتخاب محدودهها و ورود به حالتهای دیگر در همین مود اجرا میشود. برای مثال دستورات زیر
- w: به کلمه بعد میرود.
- b: به کلمه قبل میرود.
- x: یک کاراکتر حذف میشود.
- yy: کل خط کپی خواهد شد.
- gg: رفتن به اولین خط
- G: رفتن به آخرین خط
- dd: حذف خط
در همین حالت انجام میشود. هر زمان تایپ کردید اما متن وارد نشد، بدانید هنوز در Command هستید و باید با Esc وضعیت را کنترل کنید. این حالت در واقع مرکز مدیریت و کار با vi در لینوکس است.
حالت Insert در ویرایشگر vi
حالت Insert دقیقا جایی است که میتوانید در آن متن واقعی را تایپ کنید. برای ورود به این مود باید از حالت Command یکی از کلیدهای i، a، o یا حروف بزرگ آنها را فشار دهید. هرکدام نحوه شروع متفاوتی دارند، مثلا i متن را قبل از مکان فعلی مینویسد، a بعد از مکان فعلی و o یک خط جدید زیر خط فعلی باز میکند.
وقتی وارد Insert میشوید، ویرایشگر شبیه یک ادیتور معمولی عمل میکند و هرچیزی که تایپ نمایید، مستقیما در فایل ذخیره میشود. برای خروج کافی است کلید Esc را بزنید و دوباره به Command برگردید. این حالت برای نوشتن، اصلاح متن، اضافه کردن خطوط جدید و هرگونه ویرایش فایل متنی در لینوکس استفاده میشود.
حالت Last Line در ویرایشگر vi
حالت Last Line زمانی فعال میشود که در وضعیت Command کلید دو نقطه (:) را بزنید. در پایین صفحه، یک خط فرمان ظاهر میشود که میتوانید دستورهای مدیریتی و پیشرفتهتر را وارد کنید. اعمالی مثل
- w: ذخیره فایل
- q: خروج
- wq: ذخیره و خروج همزمان
- !q: خروج بدون ذخیره
- %s/old/new/g: جستجو و جایگزینی کل فایل
در همین مود انجام میشود. این حالت شبیه یک خط فرمان کوچک داخل vi است که کنترل کاملی روی فایل میدهد، بخشی که بیشتر مدیران سرور و کاربران حرفهای از آن استفاده میکنند. بعد از اجرای دستور دوباره به Command برمیگردید.
نحوه باز کردن و ساخت فایل در vi
برای کار با ویرایشگر vi در Linux اولین قدم این است که بتوانید یک فایل جدید بسازید یا یک فایل موجود را باز کنید. این دو کار پایهای کمک مینماید، سریعتر وارد محیط ویرایش شوید و تغییرات لازم را روی فایلها انجام دهید.
ساخت فایل جدید در ویرایشگر vi
برای ساخت فایل با vi کافی است نام فایلی را که وجود ندارد در کنار دستور vi وارد کنید. مثلا وقتی مینویسید:
اگر این فایل از قبل وجود نداشته باشد، vi یک فایل خالی با همین نام ایجاد میکند و شما مستقیما وارد محیط ویرایش میشوید. بعد از وارد شدن، میتوانید با رفتن به حالت Insert متن فایل را بنویسید و در پایان با دستورهای :w یا :wq آن را ذخیره کنید. در ویرایشگر vi نیازی نیست قبل از باز کردن فایل، آن را بسازید، همین دستور ساده خودش فایل جدید را ایجاد مینماید.
باز کردن فایل موجود در vi
برای باز کردن یک فایل موجود کافی است نام همان فایل را بعد از دستور vi بنویسید، مثلا:
اگر فایل وجود داشته باشد، محتوا بلافاصله در محیط ویرایشگر نمایش داده میشود و شما میتوانید با استفاده از حالت Command در متن حرکت کنید و با ورود به حالت Insert تغییرات لازم را انجام دهید. در نهایت، با دستورهای حالت Last Line مانند :w برای ذخیره یا :q برای خروج میتوانید کار خود را تمام کنید.
دستورات کاربردی در حالت Insert
حالت Insert در ویرایشگر vi حالتی است که در آن میتوانید متن واقعی را تایپ کنید و فایل را همانطور که در یک ویرایشگر معمولی مینویسید، تکمیل یا اصلاح نمایید. در این حالت، تمامی ورودیهای صفحهکلید به صورت مستقیم در فایل نوشته میشود و شما میتوانید خط جدید اضافه کنید، بین کلمات متن درج نموده یا محتوای موجود را ویرایش نمایید.
شناخت کلیدهای ورودی این حالت و روش خروج از آن باعث میشود، هنگام کار با دستورات insert در vi سرعت بیشتری داشته باشید و اشتباهات کمتری انجام دهید. در ادامه، نحوه کار کردن با ویرایشگر vi در لینوکس را بررسی میکنیم.
درج متن
در حالت Insert شما میتوانید هر نوع محتوایی را از متن ساده گرفته تا کدهای پیکربندی تایپ کنید. هر کلید که فشار دهید به طور مستقیم در فایل نوشته میشود، این حالت برای اضافه کردن خطوط جدید، اصلاح بخشهای قدیمی و ویرایش سریع محتوا کاربرد دارد. تنها نکتهای که باید به آن توجه کنید این است که برای استفاده از دستورات حرکتی vi باید ابتدا از حالت Insert خارج شوید.
کلیدهای ورودی: a،i،o
برای ورود به حالت Insert چند کلید مهم وجود دارد که هرکدام رفتاری متفاوت دارند و طرز نوشتن شما را سریعتر و حرفهایتر میکنند:
- i: شما را وارد حالت Insert میکند و متن را دقیقا از محل فعلی نشانگر شروع میکند.
- a: همانند i عمل میکند اما نقطه شروع را یک کاراکتر جلوتر قرار میدهد تا بتوانید بعد از محل فعلی تایپ نمایید.
- o: یک خط جدید در پایین خط فعلی ایجاد میکند و نشانگر را در ابتدای آن قرار میدهد تا نوشتن را در یک خط تازه شروع نمایید.
نحوه برگشت به حالت Command (کلید Esc)
برای خروج از حالت Insert و بازگشت به حالت Command، کافی است کلید Esc را فشار دهید. با این کار، vi از حالت تایپ خارج میشود و شما میتوانید دوباره دستورهایی مثل حرکت در متن، حذف، کپی یا ذخیره را اجرا کنید.
برگشت به حالت Command مهمترین اصل کار با vi است، چون تمام دستورهای مدیریتی فقط در این حالت قابل اجرا هستند. اگر هنگام کار دیدید دستورها اجرا نمیشوند، احتمالا هنوز در حالت Insert هستید و باید با Esc خارج شوید.

دستورات پرکاربرد در حالت Command
در حالت Command مجموعهای از دستورهای حرکتی وجود دارد که امکان جابهجایی سریع و دقیق داخل متن را فراهم میکند. با کلید h به سمت چپ، با l به سمت راست، با k به خط بالایی و با j به خط پایینی میروید. همچنین با w یک کلمه به جلو و با b یک کلمه به عقب حرکت مینمایید.
برای جابهجاییهای بزرگتر میتوانید از gg برای رفتن به ابتدای فایل و از G برای رفتن به انتهای فایل استفاده کنید. این دستورها برای مدیریت سریع فایلهای پیکربندی و کارهای سروری بسیار مهم هستند.
دستورات حذف متن
حذف متن در vi بسیار راحت است و در حالت Command میتوانید بدون ورود به حالت Insert بخشهای مختلفی از متن را حذف کنید:
- دستور x: حذف یک کاراکتر
- دستور dd: حذف کل خط فعلی
- دستور d$: از محل نشانگر تا انتهای خط را حذف مینماید.
- دستور dw: حذف یک کلمه
تمام این حذفها به صورت خودکار در حافظه موقت ذخیره میشوند و میتوانید آنها را با p در بخش جدیدی از متن قرار دهید.
دستورات کپی و Paste
برای کپی کردن محتوا، دستور yy یک خط کامل را کپی میکند و دستور y$ از محل نشانگر تا انتهای خط را کپی مینماید. با yw نیز میتوانید یک کلمه را کپی کنید، پس از کپی، با دستور p محتوای ذخیره شده در محل بعد از نشانگر Paste میشود. سیستم کپی و Paste در vi بسیار سریع و سبک است و بدون نیاز به ابزارهای گرافیکی کار میکند.
جابهجایی سریع در متن (cut)
جابهجایی یا همان cut در ویرایشگر vi در Linux با دستورهای d انجام میشود. دستورهایی مانند dd، dw یا d$ متن را حذف میکنند اما همزمان آن را در حافظه موقت ذخیره مینمایند تا با p بتوانید آن را در بخش جدیدی از فایل قرار دهید. این قابلیت باعث میشود بتوانید خطوط را جابهجا کنید، ساختار متن را تغییر داده و ویرایشهای بزرگ را خیلی سریع انجام دهید. این سرعت و دقت برای مدیرهای سرور یک مزیت مهم است.
دستورات save و exit در vi (ذخیره و خروج)
در ادامه نحوه ذخیره فایل در vi را توضیح میدهیم.
دستور w برای ذخیره فایل
دستور w: برای ذخیره کردن تغییراتی است که در فایل ایجاد کردهاید. پس از فشردن : در حالت Command، با نوشتن w و زدن Enter فایل شما ذخیره میشود. این دستور بدون خروج از ویرایشگر عمل کرده و فقط فایل را بهروزرسانی میکند.
دستور q برای خروج
دستور q: برای خروج ساده از ویرایشگر vi در Linux استفاده میشود. اگر تغییری در فایل نداده باشید، vi بدون هشدار خارج میگردد. اما اگر تغییر داده و هنوز ذخیره نکرده باشید، vi اجازه خروج نداده و پیام خطا میدهد.
دستور wq برای ذخیره و خروج
دستور wq: ترکیبی از هر دو عمل ذخیره و خروج است. با این دستور ابتدا تمام تغییرات ذخیره میشود و سپس ویرایشگر بسته خواهد شد. این دستور رایجترین روش برای پایان دادن ویرایش است.
دستور q! برای خروج بدون ذخیره
اگر در فایل تغییراتی دادهاید و نمیخواهید آنها ذخیره شوند، میتوانید از دستور q!: استفاده کنید. این دستور vi را مجبور مینماید بدون ذخیره کردن تغییرات خارج شود. این روش برای زمانی مناسب است که میخواهید ویرایش را کاملا نادیده بگیرید.
چرا برخی کاربران نمیتوانند از vi خارج شوند؟
یکی از رایجترین مشکلات کاربران تازهکار، مشکل خروج از vi است که نمیتوانند از ویرایشگر خارج شوند. دلیل اصلی این مشکل، ساختار متفاوت vi نسبت به ویرایشگرهای معمولی میباشد. در vi تا زمانی که در حالت Insert باشید، هیچ دستور مدیریتی مثل q یا w اجرا نمیشود.
بسیاری از کاربران بدون اینکه متوجه باشند در حالت Insert باقی میمانند و هر بار که q را میزنند، این کاراکتر فقط داخل فایل نوشته میشود. برای اجرای دستورهای خروج باید ابتدا با زدن Esc وارد حالت Command شوید، سپس دستورهای :q، :wq یا :q! قابل اجرا میگردند. ندانستن این تفاوت بین حالتها، باعث میشود کاربران تصور کنند vi «گیرکرده» یا «خارج نمیشود»، درحالیکه تنها مشکل، ماندن در حالت Insert است.
جستجو و جایگزینی متن در vi
در این بخش از آموزش، نحوه کار کردن با ویرایشگر vi در لینوکس به دستورات جستجو و جایگزینی متن میپردازیم.
جستجو با / (اسلش) در vi
در ویرایشگر vi در Linux، برای پیدا کردن یک عبارت کافی است در حالت Command کلید / را بزنید، متن مورد نظر را وارد کنید و سپس Enter بزنید. vi اولین مورد پیدا شده را مشخص میکند و روی آن میپرد. برای رفتن به مورد بعدی از کلید n و برای برگشت به مورد قبلی از N استفاده میشود. این روش در فایلهای بزرگ و پیکربندیها بسیار کاربردی است و به شما کمک میکند سریع به بخشهای مهم برسید.
جایگزینی متن در ویرایشگر vi با s/old/new
برای جایگزینی متن در vi از دستور s استفاده میشود. اگر بخواهید اولین مورد عبارت را در خط فعلی تغییر دهید، مینویسید:
اگر بخواهید تمام موارد همان عبارت در همان خط جایگزین شوند، از شکل کاملتر استفاده کنید:
و برای جایگزینی در کل فایل باید بنویسید:
این دستور برای اصلاح سریع متن، ویرایش فایلهای پیکربندی و تغییرات گسترده در محتوا بسیار موثر است.
نکات حرفهای و میانبرهای مهم در vi
به طور خلاصه کلیدهای میانبر کاربردی در (vishortkeys در vi) عبارت است از:
- h / j / k / l: حرکت سریع در متن بدون استفاده از کلیدهای جهت
- i / a / o: ورود به حالت Insert از موقعیتهای مختلف
- dd: حذف یک خط کامل
- yy: کپی یک خط
- p: پیست بعد از مکاننما
- u: کنسل کردن آخرین تغییر
- Ctrl+r Redo
- gg: رفتن به ابتدای فایل
- G: رفتن به انتهای فایل
- /text: جستجوی یک عبارت در متن
- :%s/old/new/g: جایگزینی همه موارد یک عبارت در کل فایل
- :w ذخیره
- :q! خروج بدون ذخیره
تفاوت vi و vim
ویرایشگر vi نسخه قدیمیتر و پایهایتر یک ویرایشگر متنی در یونیکس است که امکانات ضروری مانند ویرایش خط، حرکت در متن و ذخیره را فراهم میکند، اما قابلیتهای پیشرفته زیادی ندارد.
در مقابل، vim نسخه توسعه یافته و قدرتمندتر vi است که امکانات مدرن مثل هایلایت سینتکس، شماره گذاری خطوط، Undo و Redo چندمرحلهای، جستجوی پیشرفته، پلاگین پذیری، رنگبندی، قابلیت تکمیل خودکار و دهها قابلیت حرفهای دیگر را اضافه میکند.
در اصل، vim مخفف “Vi IMproved” است و تقریبا در تمام کاربردهای برنامه نویسی، مدیریت سرور و ویرایش حرفهای متن ترجیح داده میشود، چون سریعتر، هوشمندتر و قابل شخصی سازیتر از vi معمولی است.
با این حال، vi به دلیل سبکی و حضور پیشفرض در تمام سیستمهای یونیکسی، هنوز هم برای موقعیتهای اضطراری و محیطهای مینیمال بسیار ارزشمند است.
برای اجرای دستورات در لنوکس به مقاله زیر مراجعه کنید:
اجرای دستورات لینوکس در Viجمعبندی
ویرایشگر vi در Linux یکی از اصلیترین ابزارهای مدیریت و ویرایش متن در سرور لینوکس است که با وجود سادگی اولیه، انعطاف، سرعت و حضور همیشگی در همه توزیعهای یونیکسی آن را به یک ابزار قابل اعتماد برای مدیران سرور و کاربران حرفهای تبدیل میکند.
با یادگیری حالتهای مختلف vi، تسلط بر میانبرهای حرکتی، دستورات حذف، کپی و جایگزینی و همچنین روشهای ذخیره و خروج، میتوانید تقریبا هر نوع ویرایش متنی را بدون نیاز به محیط گرافیکی و حتی در شرایط اضطراری انجام دهید.
سوالات متداول
چرا در لینوکس از vi استفاده میشود وقتی ویرایشگرهای پیشرفتهتری مثل vim یا nano وجود دارد؟
زیرا vi تقریبا روی همه توزیعهای یونیکسی و لینوکسی به صورت پیشفرض نصب است. به همین دلیل، وقتی روی یک VPS یا سرور ریموت لاگین میکنید و هیچ ادیتور گرافیکی یا حتی nano در دسترس نیست.
چرا وقتی vi را باز میکنیم نمیتوانیم مستقیم تایپ کنیم؟
vi به صورت پیشفرض در حالت Command باز میشود، نه Insert. در حالت Command، هر کلید یک دستور محسوب میشود، نه متن. برای شروع تایپ باید وارد حالت Insert شوید؛ کافی است یکی از کلیدهای i (درج قبل از مکان نما)، a (درج بعد از مکان نما) یا o (ایجاد خط جدید و شروع درج) را بزنید. بعد از پایان تایپ، با Esc به حالت Command برمیگردید.
چطور در vi به سرعت در متن حرکت کنیم بدون اینکه از دکمههای جهت کیبورد استفاده کنیم؟
در vi حرکت اصلی با کلیدهای h، j، k، l انجام میشود (چپ، پایین، بالا، راست). برای حرکت سریعتر میتوانید از w برای رفتن به ابتدای کلمه بعدی، b برای برگشت به ابتدای کلمه قبلی، 0 برای ابتدای خط، $ برای انتهای خط، gg برای رفتن به ابتدای فایل و G برای رفتن به انتهای فایل استفاده کنید.
اگر وسط کار با vi اشتباه کردیم چطور تغییرات را برگردانیم؟
در vi برای Undo کردن آخرین تغییر از کلید u استفاده میشود. اگر اشتباهی Undo کردید، با Ctrl+r میتوانید Redo انجام دهید و تغییر را دوباره برگردانید.
من فرزانه یوسفی هستم؛ نویسنده و تولیدکننده محتوای وب. علاقه زیادی به تحقیق و نوشتن دارم و تلاش میکنم مطالب کاربردی و بهروز ارائه کنم تا مطالعه برای خوانندگان لذتبخشتر و مفیدتر باشد.



