Коротка довідка з редактора VI

У процесі роботи В системі вам необхідно буде створювати і редагувати текстові файли. Всі ці дії можна виконати за допомогою екранного текстового редактора ‘vi’, який розташований у каталозі ‘/usr/bin/vi’

Для початку спробуємо створити новий файл, наприклад ‘testvi’:

$ vi testvi
З’явиться порожній екран з курсором в першому рядку. Інші рядки (також порожні) будуть починатися з символа ~ (тильда). У останньої рядку буде повідомлення приблизно такого змісту:

testvi: new file: line 1.
Надалі цей рядок буде також використовуватися і для введення команд.

Трохи відвернемося від нашого файлу і розглянемо систему команд ‘vi’. Більшість команд — це поодинокі клавіші або комбінації клавіш, які виконують прості функції редагування. ‘vi’ працює в двох основних режимах — в режимі «введення тексту» і в режимі «команд».

Після запуску ‘vi’ оказыается в режимі «команд». Для переходу в режим «введення тексту» необхідно натиснути на клавішу ‘a’, ‘i’ (звертаємо вашу увагу на регістр клавіш). Після цього можна набирати текст. Кожну введену рядок слід, як це прийнято, завершувати натисканням клавіші [Enter].

Виконайте наступні дії. Натисніть клавішу ‘a’, перейдіть в режим введення тексту і наберіть 3 рядки:

Line 1
Line 2
Line 3

Для переходу в командний режим натисніть на клавіші ‘Esc’. Ця ж клавіша використовується для скасування не до кінця набраної команди. Якщо ви неправильно ввели команду, редактор соощит вам про це поодиноким звуковим сигналом.

Припустимо вам необхідно вставити в початок другого рядка ще одне слово. Для цього в режимі команд перейдіть курсор на потрібний рядок, встановити курсор в першу позицію і натисніть клавішу ‘i’. Після цього вставте потрібний текст, наприклад, слово ‘Insert’:

Line 1
Insert Line 2
Line 3

Для переходу в командний режим знову натисніть клавіші ‘Esc’, призначення якої сподіваємося ви вже зрозуміли. Якщо ви з якихось причин заплуталися в якому режимі ви знаходитесь, натисніть два рази поспіль ‘Esc’. Редактор видасть звуковий сигнал, повідомляючи таким чином, що ви перебуваєте в командному режимі.

Щоб зробити редактор трохи по балакучішою, в команді режимі введіть наступну команду в нижньому рядку:

:set verbose showmmode [Enter]
(У даному прикладі символ ‘:’ означає ознака введення команди.)

Після виконання даної команди редактор буде повідомляти вам про досягнення кінця рядка і файлу, перехід в командний режим і т. д.

Для переміщення курсору по тексту в командному режимі можна використовувати клавіші керування курсором, а також такі клавіші:

h або ПРОБІЛ Курсор на один символ ліворуч.
l або BACKSPASE Курсор на один символ вправо.
j Курсор на один рядок вниз.
k Курсор на один рядок вверх.
^ Перемістити курсор на початок першого слова поточного рядка.
$ Перемістити курсор в кінець поточного рядка.
| Перемістити курсор в першу позицію поточного рядка.
w Перемістити курсор вперед на початок наступного слова.
b Перемістити курсор назад на початок поточного слова.
e Перемістити курсор в кінець слова.
( Перемістити курсор в початок пропозиції (назад).
) Перемістити курсор в кінець пропозиції (вперед).
{ Перемістити курсор на початок параграфа (назад).
}) Перемістити курсор у кінець параграфа (вперед). (Параграфи можуть бути розділені порожніми рядками).

Якщо перед натисненням на клавішу набрати якесь число, то курсор буде переміщений на відповідне число позицій або рядків.

‘число’ПРОБІЛ Перемістити курсор на зазначене ‘число’ позицій вправо.
‘число’BACKSPASE Перемістити курсор на зазначене ‘число’ позицій вліво.

Також для переміщення по тексту можна використовувати наступні команди:

‘число’G Перемістити курсор у зазначений рядок.
‘число’| Перемістити курсор у вказану позицію поточного рядка.

В даному випадку ‘число’ обначает кількість повторів команд, яке необхідно виконати.

Для пошуку тексту можна використовувати команду /. Після неї необхідно ввести рядок пошуку і натиснути. Наприклад:

:/Line 5[Enter]
Після завершення пошуку курсор знаходиться на першому символі рядка.

Знак питання ‘?’ працює тільки пошук у файлі ведеться назад (тобто у зворотному напрямку)

Для переходу в режим введення тексту можна використовувати наступні команди:

a Вставити текст після курсору.
i Вставити текст перед курсором.
o Вставити новий рядок після поточної.
O Вставити новий рядок перед поточним.

(Поточної будемо називати рядок в якій розташовано вказівник миші, а поточним символом — символ в якому знаходиться курсор).

В режимі команд можна виконувати редагування набраного тексту за допомогою наступних команд.:

x Видалити поточний символ.
dd Видалити поточну рядок.
‘число’dd Видалити зазначене ‘число’ рядків починаючи з поточної.
dw Видалити поточне слово.
‘число’dw Видалити зазначене ‘число’ слів починаючи з поточного.
r Замінити поточний символ на символ, набраний слідом за ‘r’.
‘число’s Замінити зазначене ‘число’ символів на таке ж ‘число’ набраних слідом символів.

Взагалі-то останній видалений фрагмент тексту не втрачається, а зберігається в буфері і може бути оперативно (відразу після видалення) відновлений і вставлений в будь-яке місце файлу. Таку можливість можна використовувати для перенесення рядків з одного місця в інше. Наприклад, вам необхідно поміняти місцями рядки 3 та 2 нашого файлу:

Для цього перейдіть в командний режим (‘Esc’), встановіть курсор в другу рядок, натисніть комбінацію ‘dd’. Рядок ‘Line 2’ буде видалена (поміщена в буфер) і весь текст пересунеться до верху. У поточному рядку з’явиться рядок ‘Line 3’:

Line 1
Line 3

Далі натисніть клавішу ‘p’. Після поточного рядка (‘Line 3’) з буфера буде відновлена і стане поточною рядок ‘Line 2’:

Line 1
Line 3
Line 2

Відповідно для вставки віддаленої рядки перед поточної можна використовувати команду ‘P’.

Якщо вам необхідно зберегти в буфері рядок без її видалення використовуйте команду ‘yy’. Надалі цей рядок можна скопіювати в інше місце файла. Для роботи з буфером і для переміщення (копіювання) рядків можна використовувати наступні команди:

yw Зберегти слово в буфері.
‘число’yw Зберегти зазначене ‘число’ слів в буфері.
yy Зберегти поточну рядок в буфері.
‘число’yy Зберегти зазначене ‘число’ рядків в буфері.
p Скопіювати і помістити інформацію з буфера після поточного рядка.
P Скопіювати і помістити інформацію з буфера перед поточним рядком.

(Після копіювання інформація з буфера не видаляється і її можна використовувати ще).

Існує ще одна цікава команда. (точка). Вона виконує останню введену команду. Наприклад, якщо за допомогою команди ‘dd’ була видалена рядок, то натискання на клавішу. призведе до видалення наступного рядка. Якщо рядок була поміщена в вікно редагування з буфера по команді ‘p’, то натискання на. призведе до приміщення у вікно редагування ще однієї копії рядка.

При запуску ‘vi’ можна вказати наступні параметри:

vi Редагує тимчасовий файл, якому при збереженні тексту необхідно дати ім’я.
vi +45 file Переходить на рядок з номером 45.
vi +/word file Шукає перше входження слова «word»
$vi -c команда Виконати команду [cmd] негайно після початку сеансу редагування.
$vi -r Відновити зазначені файли, якщо стався аварійний вихід з редактора або раптове завершення системи. Якщо файли не визначені, вивести список файлів, які можуть бути восстанволены.

Для виходу з редактора і збереження тексту використовуєте наступні команди:

:w зберегти текст без виходу з редактора
:w ім’я_файлу Зберегти текст у визначеному файлі.
:wq або 😡 Зберегти текст і вийти з редактора.
:q Вийти з редактора. Якщо файл був модифікований, вам буде запропоновано для виходу без збереження використовувати команду :q!
:q! Вийти з редактора без збереження тексту.

Насправді ‘vi’ працює з копією вашого файлу, тому в разі збою ваш вихідний файл навряд чи постраждає.