مقدمه
در این مقاله قصد داریم تا کار با ویرایشگر متنی vi را بیاموزیم. vim در حقیت نسخه بهبود یافته (improve) ویرایشگر vi است . vi از دیرباز بر روی سیستم عامل گنو/لینوکس با توزیع های مختلف نصب میباشد.
سوالی که احتمالا در ذهنتان نقش میبندد این است : چرا تا زمانی که با دستور echo و عملگر forward میتوانیم یک فایل را متنی را ساخته و متن مورد نظر را ذخیره کنیم، از ویرایشگر بهره ببریم؟
در جواب باید گفت: پس از نوشتن متن مورد نظر با دستور echo و ذخیره متن،اگر قصد اعمال تغییر روی متن را داشته باشیم این امر امکان پذیر نیست ، مگر آنکه متن را مجدداً تایپ کنیم.اما با وجود ویرایشگر های متن (text editor) می توانیم هر زمان که بخواهیم روی متن خود تغییر اعمال کنیم.
Modeهای مختلف در Vi
این ویرایشگر دارای حالت های مختلفی است اما ۳ حالت کاربردی تر آن شامل :
- Insert (edit) mode
- Vi command mode
- Host command mode
میباشد.
بصورت پیش فرض کاربر در command mode وارد خواهد شد.برای اعمال تغیرات باید به insert mode سوییچ کنیم که این کار با فشردن کلید “i” میسر میشود.
البته کلید های دیگری نیز این عمل را انجام میدهند که به اختصار در جدول زیر وجود دارند.
عمل | کاراکتر |
از ابتدای خط وارد insert mode میشود. | I |
از سمت چپ نشانگر وارد insert mode میشود. | i |
از آخر خط وارد insert mode میشود. | A |
از سمت راست نشانگر وارد insert mode میشود. | a |
یک خط جدید پایین مکان نما ایجاد کرده و از آن خط وارد insert mode میشود. | o |
یک خط جدید بالای مکان نما ایجاد کرده و از آن خط وارد insert mode میشود. | O |
با فشردن دکمه insert نیز وارد حالت insert mode میشویم و اگر دوباره همان کلید را فشار بدهیم وارد replace mode میشویم. تفاوت این حالت در این است که،کاراکتر های دلخواه ما به جای کاراکتری که جهت نمای موس روی آن است مینشیند و نه در کنار آن.
برای ذخیره سازی نوشته های خود باید در host command mode قرار داشته باشیم .برای سوویچ به این حالت اگر در insert mode باشیم با زدن دکمه Esc وارد vi command mode شده و با زدن ” : ” وارد حالت host خواهیم شد. حالا با تایپ w و زدن دکمه enter متن ذخیره خواهد شد و با زدن q و فشردن enterمیتوانیم خارج شویم.دلیل این کار انتقال اطلاعات از حافظه رم به دیسک جهت ذخیره سازی است.
اگر قصد داشته باشیم همزمان هم خارج بشویم و هم متن را ذخیره کنیم بصورت ترکیبی هر دو دستور را اینگونه تایپ کنیم
:wq
یا
: x
در حالت پیش فرض ZZ (با حروف بزرگ) همین نتیجه را میدهد.
اعمال دستور vi باعث ساخت فایل نیز میشود.با این حال، اگر قصد اضافه کردن فایل داشت باشید و آن فایل وجود نداشته باشد؛ مستقیم دستور vi را اعمال کرده و پس از ذخیره و خروج فایل متنی نیز ساخته میشود.
برای اینکه در کنار هر خط شماره خط داشته باشیم set nu: را تایپ میکنیم وبرای رفتن به یک خط خاص بعد از دو نقطه شماره خط را مینویسیم.
حرکت در متن
زمان تولد ویرایشگر vi کیبوردها استاندارد ۷۰ کلیدی داشتند و فاقد کلیدهای جهت نما بودند. برای جابجایی مکان نما(cursor) بین متن ، از کلید h برای جهت سمت چپ، از کلید j برای جهت پایین، از کلید k برای جهت بالا و از کلید L برای جهت راست استفاده میکنیم.
با زدن H به اولین خط مانیتور میرویم. با زدن L به آخرین خط مانیتور خواهیم رفت. اگر قصد کاوش در خطوط یک فایل را داشته باشیم با زدن gg به اولین خط در فایل و با زدن G به آخرین خط در فایل میرویم .
با زدن w به یک لغت جلوتر میرویم و با زدن b به یک لغت عقب تر خواهیم رفت.
علامت caret (^) ما را به اولین نوشته در یک خط خواهد برد و علامت $ما را به آخر خط خواهد برد.
برای رفتن به ۱ صفحه بالاتر ctrl+f را بصورت ترکیبی فشار خواهیم داد.
برای رفتن به ۱ صفحه پایین تر ctrl+b را به صورت ترکیبی فشار خواهیم .
حذف متن در ویرایشگرvi
با فشردن x (در vi command mode)حروف سمت راست مکان نما حذف خواهند شد و برای حذف حروف سمت چپ متن با فشردن Xاین کار انجام خواهد شد.
دکمه های ترکیبی نیز برای انجام این کار وجود دارند مثلا s یک کاراکتر از سمت راست را حذف کرده و وارد حالت insert mode میشود(البته دستور xiنیز همین عمل راانجام خواهدد داد)
S بزرگ کل خط را پاک کرده و بعد وارد insert mode میشود.
انتقال متن در ویرایشگر vi
کافیست تا d را قبل از کلید های جهت نما که در بالا اشاره کردم اضافه کنیم.
برای مثال :
d5l
یعنی ۵ کاراکتر به سمت راست را انتقال بده.
برای انتقال کل یک خط از دستور dd استفاده خواهیم کرد.اگر به این دستور ضریب بدهیم تعداد خط های بیشتری را انتقال خواهد داد.
اگر به جای d از حرف c استفاده کنیم همین کار را انجام میدهیم با این تفاوت که پس از انجا عمل cut وارد حالت insert خواهیم شد.
کپی کردن متن
برای انجام این کار از لغت y استفاده میکنیم .برای مثال
y100j
۱۰۰خط به پایین را کپی کن.
yy کل خط را برای ما کپی میکند.
جایگذاری متن
اگر بخواهیم متن های انتقال پیدا کرده یا کپی شده که اکنون در clip board قرار دارند را جای گذاری کنیم از p کوچک برای جای گذاری در سمت راست جهت نما و Pبزرگ سمت چپ جهت نما جای گذاری خواهد کرد.این دستور نیز ضریب میپذیرد.
جستجو در Vi
برای جستجو در خط های بالا ابتدا “/” و سپس کلمه موردنظر را تایپ میکنیم.جهت جستجو در خطوط پایین ابتدا “؟” و سپس کلمه مورد نظر را تایپ خواهیم کرد.پس از جستجو اگر کلید n را فشار دهیم؛ ویرایشگر هم جهت با نحوه جستجو به دنبال لغت گشته و اگر N را متوالی فشار بدهیم خلاف جهت نحوه سرچ به دنبال آن لغت خواهد گشت.
دستورات متفرقه در ویرایشگر vi
جهت برگشت تغییرات(undo) کافی است در حالت default کلید u را فشار دهید. جهت redo کردن بصورت ترکیبی ctrl + r فشار دهید.برای تکرار آخرین دستور نیز “.” را فشار بدهید.
پس از تایپ w در حالت command اگر آدس و نام فایل را بدهیم عملیات save as انجام خواهد شد.
اگر در حالت command تایپ کنیم e و سپس آدرس و نام فایل را تایپ کنیم، آن فایل در یک تب جدید باز خواهد شد.
اگر :r را تایپ کرده و سپس آدرس و نام فایل را تایپ کنیم،محتویات آن فایل به فایل کن.نی شما اضفه خواهد شد.
گاهی اوقات به دستورات bash نیاز داریم اما قصد خارج شدن از فایلی که در حال ویرایش هستیم را نداریم،برای این کار کافی است از !:استفاده کنیم و هر دستورات دلخواه درون ویرایشگر برای ما خروجی مورد نظر را نمایش میدهد.
نکته آخر اینکه اگر بدون ذخیره سازی تغییرات قصد خروج داشته باشیم این ویرایشگر اجازه خروج نخواهد داد؛برای جلوگیری از این اتفاق باید به اجبار(force)خارج شویم. کاراکتر مناسب برای اینکار “!” است. بنابراین پس q علامت تعجب را اضافه کرده و بدون ذخیره سازی خارج میشویم.
:q!
علامت تعجب روی دستور e اجبار را اعمال می کند.