Анотація
Vi був першим з існуючих повноекранних редакторів. Це одна з основних програм, яка піддається нападкам з боку противників UNIX®, і яка водночас є одним з кращих аргументів його захисників: хоча Vi досить складний у вивченні, він стає надзвичайно потужним інструментом, коли людина набирається досвіду в його використанні. З допомогою кількох натискань на клавіші користувач Vi може "згорнути гори", і, крім Emacs, небагато текстових редакторів можуть похвалитися тим самим.
Насправді версія, що поставляється з Mandriva Linux - це Vim (від VI iMproved, поліпшений VI), але в цій главі ми називатимемо його Vi.
Якщо ви хочете докладніше вивчити Vi, ви можете глянути на ці документи: Hands-On Introduction to the Vi Editor чи Vim home page.
Щоб розпочати вивчення Vi, ми використовуємо той же набір команд, що й для Emacs. Тому повернімося до наших двох файлів і наберемо:
$ vi file1 file2
На цьому етапі ви виявите перед собою вікно на зразок цього:
Нині ви перебуваєте у так званому командному режимі з першим відкритим файлом на екрані. У цьому режимі ви не можете вставити текст в файл. Для цього ви повинні переключитися в режим вставки.
Ось кілька клавіатурних команд для вставки тексту:
У режимі вставки ви побачите рядок --INSERT--
у нижній частині екрана (так ви визначаєте, у якому режимі ви перебуваєте). Це єдиний режим, який дозволить вам вставити текст. Щоб повернутися в командний режим, натисніть клавішу Esc
.
У режимі вставки ви можете використовувати клавіші Backspace
і DEL
для видалення тексту в міру необхідності. Клавіші зі стрілками дозволять вам переміщатися по тексту в командному режимі і у режимі вставки. У командному режимі є й інші комбінації клавіш, які ми розглянемо пізніше.
Переключення в режим ex здійснюється шляхом натискання в командному режимі клавіші :. У нижній лівій частині екрана з'явиться : з курсором. Усе, що ви введете до натискання на клавішу Enter
, Vi буде інтерпретувати як команду ex. Якщо ви приберете введену вами команду і сам символ :, ви будете повернуті в командний режим, а курсор повернеться на вихідну позицію у тексті.
![]() | Підказка |
---|---|
У режимі ex вам доступно автозавершення команд: введіть перші символи команди і натисніть клавішу Tab, щоб завершити її набір. |
Для збереження змін у файлі, введіть в командному режимі :w
. Якщо ви хочете зберегти вміст буфера в інший файл, введіть :w
<ім'я_файлу>
.
Для переміщення в одному і те ж самому буфері між файлами, чиї імена були відзначені у командному рядку, введіть :next
для переходу до наступного файлу і :prev
для переходу до попереднього файлу. Ви також можете скористатися командою :e <ім'я_файла>
, яка дозволяє вам або перейти до потрібного файлу, якщо його уже відкрито, або відкрити інший файл. Також ви можете використовувати завершення імен файлів.
Також як і в Emacs, у вас на екрані може бути кілька буферів. Для цього скористайтеся командою :split
.
Щоб змінити буфер, введіть Ctrl-wj для переходу в нижній буфер, або Ctrl-w k для переходу у верхній буфер. Ви також можете використовувати клавіші зі стрілками угору й униз замість j чи k. Команда :close
приховує буфер, а команда :q
закриває його.
Вам слід знати, що якщо ви спробуєте приховати чи закрити буфер без збереження зроблених змін, команду не буде виконано, а Vi виведе це повідомлення:
No write since last
change (use ! to override) (Після останнього зміни не було
виконано запис (використовуйте ! для перекриття))
У цьому разі зробіть, як було сказано вище, і наберіть :q!
або :close!
.
У Vi крім клавіш режиму редагування Backspace
і DEL
є багато інших команд для видалення, копіювання, вставки і заміни тексту в командному режимі. Усі наведені нижче команди по суті діляться на дві частини: виконувана дія і її ефект. Діями можуть бути:
Ефект визначає групу символів, для якої застосовується команда.
h, j, k, l: один символ зліва, внизу, вгорі і справа відповідно[20].
e, b, w: кінець, початок поточного слова та початок наступного слова відповідно.
^, 0, $: перший непорожній символ, початок і закінчення поточного рядку відповідно.
f<x>
: наступний знайдений символ <x>
. Наприклад, fe
перемістить курсор до наступного знайденого символу e.
/<рядок>
, ?<рядок>
: наступний і попередній знайдений рядок чи регулярний вираз <рядок>
. Наприклад, /lafox
переміщає курсор до наступного слова lafox
.
Перед кожним з цих “ефективних” символів чи кожної з команд переміщення може йти номер повторень. Для команди G (“Go”) він означає номер рядка у файлі. Базуючись на цій інформації, ви можете створювати будь-які варіанти комбінацій.
Хоча багато з цих команд здаються не дуже зрозумілими, найкращий спосіб для їх запам'ятовування буде практика. Проте, як бачите, висловлення “звернути гори кількома клавішами” не настільки вже й перебільшене.
У Vi є команда, яку ми вже бачили при копіювання тексту - це команда y. Для вирізання тексту використовуйте команду d. Для зберігання тексту виділяється 27 осередків пам'яті чи буферів: анонімна пам'ять і 26 осередків з іменами у вигляді літер англійського алфавіту в нижньому регістрі.
Для використання анонімної пам'яті введіть команду “як є”. Так, команда y12w
скопіює в анонімну пам'ять 12 слів після курсора[21]. Використовуйте d12w
, якщо ви хочете вирізати цю область.
Щоб скористатися одним з 26 названих осередків пам'яті, введіть перед командою послідовність "<x>, lt;xgt; k, quot;ky12w, quot;kd12w, </x>
Щоб вставити вміст анонімної пам'яті, використовуйте команди p
або P
(від слова Paste) для вставки тексту після чи до курсору відповідно. Щоб вставити вміст іменованого осередку пам'яті, таким самим чином використовуйте "<x>p
чи "<x>P
(наприклад, "dp
вставить після курсору вміст осередку пам'яті d
).
повторно скопіюємо перші 6 слів речення в осередок пам'яті r
(для прикладу): "ry6w
[22];
Ми отримали очікуваний результат, як показано на Рисунок 8.6, “VIM, після копіювання текстового блоку”.
Пошук тексту є дуже простим: просто введіть в командному режимі /, рядок, який шукаєте, і натисніть клавішу Enter. Наприклад, /kyiv
шукатиме рядок kyiv
від поточної позиції курсору. Натискання на n перемістить вас до наступного знайденого збігу, а якщо ви досягнете кінця файла, пошук розпочнеться знову з початку файла. Для пошуку в зворотному напрямку замість / використовуйте ?.
Команда для виходу - :q
(насправді, як ми вже бачили, вона закриває активний буфер, але якщо це єдиний відкритий буфер, ви завершите роботу Vi). Є скорочена клавіатурна команда, бо в більшості випадків ви редагуєте один файл. Тому для виходу ви скористаєтеся:
Вам слід звернути увагу на те, що якщо у вас відкрито кілька буферів, то :wq
запише і закриє лише активний буфер.
[20] Скорочена клавіатурна команда для dl
(видалення одного символу справа) - x; скорочена клавіатурна команда для dh
(видалення одного символу зліва) - X; dd
видаляє поточний рядок.
[21] Але тільки, якщо курсор знаходиться в початку першого слова!
[22] У буквальному сенсі y6w
означає: “Вырізати 6 слів”.