جستجو و جایگزینی در ویرایشگر vi
vi توانایی جابهجایی مکاننما به موقعیتهای جستجو شده را دارد. این را میتوان بر روی یک خط و یا یک فایل انجام داده و همچنین میتوان جایگزینی متن را نیز انجام داد.
جستجو درون یک خط
فرمان f یک خط را جستجو کرده و مکاننما را به نمونه بعدی از یک کاراکتر تعیین شده انتقال میدهد. برای مثال فرمان fa خط را جستجو کرده و مکاننما را به کلمه بعدی که دارای کاراکتر a است انتقال میدهد. پس از انجام یک جستجو در خط میتوان آن را با استفاده از فرمان : تکرار نمود.
جستجوی یک فایل کامل
به منظور جابهجایی مکاننما به رخداد بعدی یک کلمه یا عبارت، از فرمان / استفاده میشود. این همان فرمانی است که در داخل فرمان less در درسهای قبلی استفاده کردیم. وقتی شما فرمان / را تایپ میکنید، یک علامت / در پایین صفحه نمایش نشان داده میشود. سپس کلمه یا عبارت مورد نظر را تایپ کرده و Enter را فشار دهید. در نتیجه آن مکاننما به محل جستجو که عبارت ما قرار دارد منتقل میگردد. با استفاده از فرمان n میتوان جستجوی قبلی را تکرار کرد:
The quick brown fox jumped over the lazy dog. It was cool. Line 2 Line 3 Line 4 Line 5
مکان نما را در اولین خط فایل قرار دهید. تایپ کنید:
/Line
جستجو و جایگزینی سراسری
vi از یک فرمان خارجی به منظور انجام عملیاتهای جستجو و جایگزینی در کل خطوط یک فایل استفاده میکند. برای مثال به منظور تغییر کلمه Line در کلیه خطوط به کلمه line فرمان زیر را وارد کنید:
:%s/Line/line/g
این فرمان را به چندین آیتم مختلف تقسیم کرده تا ببینیم هر کدام چگونه عمل میکند. به جدول زیر توجه کنید. هر یک از بخشهای فرمانی که وارد کردهایم را توضیح میدهد:
| آیتم | معنا |
|---|---|
| : | کاراکتر دونقطه یک فرمان خارجی را شروع میکند. |
| % | محدوده خطوط برای عملیات را تعیین میکند. % یک میانبر است به این معنی که از خط اول تا خط آخر. این رنج را میتوان بصورت 1% تعیین کرد که یعنی از خط 1 تا آخرین خط در فایل. اگر محدوده خطوط حذف شده عملیات فقط در خط فعلی انجام میشود. |
| s | عملیات را تعیین میکند. در این مورد جستجو و جایگزینی (Search and replace) |
| /Line/line/ | الگوی جستجو و متن جایگزین |
| g | به معنی Global یعنی اینکه جایگزینی بر روی همه نمونههای رشته جستجو در خط انجام میشود. اگر که g را حذف کنید، فقط اولین نمونه از رشته جستجو بر روی هر خط جایگزین میشود. |
همچنین میتوانیم یک فرمان جانشینی را با تایید کاربر اجرا کنیم:
The quick brown fox jumped over the lazy dog. It was cool. line 2 line 3 line 4 line 5
مشاهده میکنید این بار از ما سوال میپرسد و در داخل پرانتز کاراکترهایی را نشان میدهد. هر کدام از این کاراکترها یک پاسخ به vi هستند که در جدول زیر این پاسخها توضیح داده شدهاند:
| کلید | حرکت مورد نظر |
|---|---|
| y | انجام جایگزینی |
| n | رد کردن این نمونه از الگو |
| a | انجام جایگزینی بر روی این و همه نمونههای الگو متعاقب آن |
| q or ESC | خروج از جایگزینی |
| l | انجام این جایگزینی و سپس خروج. که مخفف کلمه last میباشد. |
| CTRL-E, CTRL-Y | جابجایی به پایین. برای نمایش محتوای مورد نظر برای جایگزینی مفید است. |
ویرایش چندین فایل
گاهی اوقات نیاز است که چندین فایل را به صورت همزمان ویرایش کنیم. شاید نیاز داشته باشید چندین فایل را تغییر دهید یا ممکن است محتوای یک فایل را به فایل دیگر کپی کنید. با استفاده از vi میتوانیم چندین فایل را برای ویرایش با هم باز کنیم. با اختصاص دادن نام آنها پس از فرمان vi به صورت زیر:
vi file1 file2 file3…
به منظور ایجاد فایل جدید با استفاده از فرمان ls کمی متن را از فرمان ls استخراج کرده و داخل فایل ls-output.txt میریزیم به صورت زیر:
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
حال، فایل قدیمی خود را به همراه فایل جدید در داخل vi ویرایش میکنیم:
[me@linuxbox ~]$ vi foo.txt ls-output.txt
مشاهده میکنید که vi باز میشود و اولین نام وارد شده فایل را در صفحه نمایش نشان میدهد:
The quick brown fox jumped over the lazy dog. It was cool. Line 2 Line 3 Line 4 Line 5
تعویض فایلها در vi
به منظور تعویض و جابهجایی بین فایلها در داخل vi از فرمان خارجی :n استفاده میکنیم و به منظور بازگشت به فایل قبلی از فرمان :N استفاده میکنیم.
در حالی که ما قادر به جابهجایی از یک فایل به فایل دیگر هستیم، ولی vi دارای یک قانون است که تا زمانی که فایل قبلی ذخیره نشده است شما را از جابهجایی منع میکند.
به منظور مجبور کردن vi به جابهجایی بین فایلها و نادیده گرفتن تغییرات ایجاد شده (تغییرات از بین خواهد رفت) یک علامت تعجب پس از فرمان اضافه کنید.
علاوه بر این متدهای تعویض فایل که گفتیم vi برخی فرمانهای دیگری را نیز دارد که مدیریت چندین فایل را آسانتر میکند. ما میتوانیم لیستی از فایلهایی که ویرایش کردهایم را با استفاده از فرمان :buffer نمایش دهیم.
با این کار لیستی از فایلها در پایین صفحه نمایش مشخص خواهد شد. (دقت کنید که این فرمان در vi موجود نیست و برای استفاده بایستی vim را نصب کرده باشید.)
:buffers 1 %a "foo.txt" line 1 2 "ls-output.txt" line 0 Press ENTER or type command to continue
برای جابهجایی به فایل دیگر پس از فرمان بافر شماره فایل را وارد کنید:
:buffer 2
باز کردن و ویرایش دیگر فایلها
همچنین ممکن است که بخواهید به نشست ویرایش اخیر خود فایلهایی را برای ویرایش اضافه کنید. یعنی فایلی را برای ویرایش باز کردهاید و حالا نمیخواهید از vi خارج شوید و با استفاده از فرمان قبلی دو فایل را برای ویرایش انتخاب کنید. به این منظور برای آزمایش ابتدا یک فایل foo.txt را برای ویرایش از فرمان vi باز میکنیم:
[me@linuxbox ~]$ vi foo.txt
سپس به منظور اضافه کردن فایلی دیگر از فرمان :e (سرنام واژه Edit) استفاده میکنیم.
به این منظور پس از :e نام فایل را وارد میکنید:
:e ls-output.txt
توجه داشته باشید که در این حالت نمیتوانید با استفاده از فرمانهای :n و :N بین فایلها سوییچ کنید. برای سوییچ بین فایلها در این حالت بایستی از فرمان buffer به همراه شماره فایل استفاده کنید.
کپی کردن محتوا از یک فایل به فایلی دیگر
گاهی اوقات در حین ویرایش چندین فایل میخواهیم که بخشی از یک فایل را به فایل دیگری که در حال ویرایش آن هستیم کپی کنیم. این کار را به سادگی با استفاده از فرمانهای کپی و چسباندن که یاد گرفتیم انجام میدهیم. اول با استفاده از buffer به فایل اول سوییچ کنید:
:buffer 1
سپس مکاننما را به خط اول برده و فرمان yy را وارد کنید تا کپی صورت گیرد:
The quick brown fox jumped over the lazy dog. It was cool. Line 2 Line 3 Line 4 Line 5
حال دوباره با buffer این بار به فایل ۲ سوییچ کنید:
:buffer 2
مکاننما را به خط اول برده، فرمان p را وارد کنید تا متن کپی شده در محل چسبانده شود.
total 343700 -rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [ -rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm -rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p -rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec -rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire -rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
درج یک فایل به صورت کامل در فایلی دیگر
ممکن است بخواهید که فایلی را به صورت کامل در داخل فایلی دیگر کپی کنید. به این منظور فایل ls-output.txt را به تنهایی در داخل vi با استفاده از فرمان زیر باز کنید:
[me@linuxbox ~]$ vi ls-output.txt
خروجی:
total 343700 -rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [ -rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm -rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p -rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec -rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire -rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
به خط سوم رفته و فرمان زیر را وارد نمایید:
:r foo.txt
مشاهده میشود که محتویات فایل در foo.txt کپی میشود:
total 343700 -rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [ -rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm The quick brown fox jumped over the lazy dog. It was cool. Line 2 Line 3 Line 4 Line 5 -rwxr-xr-x 1 root root 111276 2012-01-31 13:36 a2p -rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec -rwxr-xr-x 1 root root 11532 2011-05-04 17:43 aafire -rwxr-xr-x 1 root root 7292 2011-05-04 17:43 aainfo
ذخیره کار خود در vi
شبیه تمامی دیگر کارها در vi ذخیره فایلهای ویرایش شده نیز راههای مختلفی دارد. میدانید که میتوان این کار را با استفاده از فرمان :w (سرنام واژه Write) انجام داد. ولی روشهای دیگری وجود دارد که ممکن است مفید باشند. در حالت فرمان (Command Mode) وارد کردن ZZ فایل اخیر را ذخیره کرده و شما را از vi خارج میکند. فرمان :wq یک فرمان ترکیبی است و همین کار را انجام میدهد.
همچنین برای فرمان :w ممکن است نام فایل را تعیین کنیم. با این کار میتوانیم فایلی را با نامی دیگر ذخیره کنیم. درست مثل گزینه save as که در اکثر برنامهها وجود دارد.
درباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش جفنگ استفاده میکند. درباره چگونگی پردازش دادههای دیدگاه خود بیشتر بدانید.
دیدگاهتان را بنویسید