Оволодіння редактором Vi/ViM

Для роботи з CLI ми часто зустрічаємо текстові дані. І те, як швидко та ефективно ми можемо працювати з цими даними, має велике значення для того, щоб виконати завдання та заощадити час.

У цій статті ми дізнаємося про редактор ViM і як ми можемо використовувати цей інструмент для редагування текстів (файлів) на Linux-машинах.

Що таке Vi/ViM?

Vi (Visual) — це найпотужніший і найвідоміший текстовий редактор, доступний на системах Linux, а ViM (Vi IMproved) — це просто новіша та вдосконалена версія Vi.

На відміну від редактора nano, в Vi ми не отримуємо жодних клавіатурних скорочень безпосередньо в редакторі, тому на початку це може здаватися складним. Однак гарантовано, що використання редактора Vi/ViM підвищить нашу ефективність і продуктивність при роботі з текстами.

Різні режими редактора Vi

В редакторі Vi є 4 різних режими, і кожен з них має свою специфічну мету. Тому важливо мати чітке розуміння всіх цих режимів для ефективного редагування тексту.

  1. Режим команд
  2. Режим вставки
  3. Режим Escape/Ex
  4. Візуальний режим

Режим команд

Це за замовчуванням активний режим в Vi, який включається, як тільки ми відкриваємо файл у редакторі Vi.

У цьому режимі ми можемо лише редагувати (видаляти/вставляти/копіювати) текст у файлі, але не можемо виконувати операції збереження. Може здаватися, що ми можемо просто почати набирати текст, але можуть виникнути неочікувані результати, якщо спробуємо це зробити.

Деякі операції, які ми можемо виконати в цьому режимі:

h : Переміщення на один символ вліво  
l : Переміщення на один символ вправо  

j : Переміщення на один рядок вниз (Alt: Enter)  
k : Переміщення на один рядок вгору  

O : Переміщення на початок поточного рядка  
$ : Переміщення в кінець поточного рядка  

gg : Переміщення на початок файлу  
G : Переміщення в кінець файлу  

'N'G : Переміщення на N-ий рядок файлу  

w : Переміщення на одне слово вперед  
b : Переміщення на одне слово назад  

) : Переміщення на наступне речення  
( : Переміщення на попереднє речення  

} : Переміщення на наступний абзац  
{ : Переміщення на попередній абзац  

b : Переміщення на початок слова  
e : Переміщення в кінець слова  

u : Скасувати попередні зміни, якщо вони були зроблені у файлі  

yy : Копіювання поточного рядка (йанк тексту)  
p : Вставка скопійованого рядка  

dd : Видалення поточного рядка  
'N'dd : Видалення N рядків з поточного  
dw : Видалення одного слова  
Ndw : Видалення N слів  
x : Видалення одного символу на курсорі  

:set number : Показати номер рядка перед кожним рядком у файлі (тимчасово)

Режим вставки

Цей режим дозволяє нам вставляти текст у файл.

Цей режим активується при натисканні ‘i’ в режимі команд. Все, що ми набираємо, Vi буде вставляти як символи, а не трактувати як команди.

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

i : Вставити текст перед поточним курсором  
a : Вставити текст після поточного курсора  

l : Вставити текст з початку поточного рядка  
A : Вставити текст в кінець поточного рядка  

o : Відкрити новий рядок під поточним  
O : Відкрити новий рядок над поточним  

s : Замінити поточний символ  
S : Замінити поточний рядок  

r : Замінити поточний символ  
R : Замінити поточний рядок

Режим Escape / Ex

Цей режим дозволяє виконувати такі операції, як збереження файлів та виконання команд.

Він активується при введенні ‘:’ або ‘/’, коли Vi знаходиться в режимі команд.
Курсор переміщається на останній рядок екрану, і редактор vi чекає команд від користувача для виконання відповідних дій.

Різні операції, які можна виконати в цьому режимі:

**Пошук тексту:**  
/text : Виконати пошук в напрямку вперед (згори вниз)  
?text : Виконати пошук в зворотному напрямку (знизу вгору)  
 n : Шукати наступне входження знайденого тексту в напрямку вперед  
 N : Шукати наступне входження знайденого тексту в напрямку назад  

**Зберегти і вийти:**  
 :w : Зберегти зміни  
 :wq : Зберегти зміни в поточний файл і вийти (Альтернативна команда-> :x)  
 :wq! : Примусово зберегти в файл, що має тільки для читання  
 :q! : Вийти без збереження змін  

**_ПРИМІТКА:_** Для збереження і виходу ми також можемо використовувати -> ZZ (великі Z) / Shift + zz (якщо Caps Lock вимкнено)  

**Заміна тексту, що відповідає шаблону:**  
:s///g : Заміна слів у поточному рядку  
:%s///g : Заміна кожного слова у файлі  
:%s///gc : Підтвердження перед кожною заміною, c додається наприкінці  

**Переміщення/копіювання існуючих рядків до іншого місця в документі:**  
:NcopyM : 'N' — рядок для копіювання, 'M' — номер рядка, куди його вставити  
:NmoveM : те саме, але рядок буде переміщено, а не скопійовано

Декілька порад і хитрощів для Vi/ViM:

Захист файлу паролем:

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

Тепер збережіть і вийдіть з файлу командою -> :wq

Також ми можемо просто видалити ключ шифрування, знову ввівши :X в режимі команд, і коли система запитає ключ шифрування, залиште його порожнім для видалення пароля. І наостанок :wq, щоб зберегти зміни і вийти.

Відновлення незбережених даних файлу після збою:

Припустимо, що ми намагалися внести зміни до файлу під назвою ‘newfile’, і через деякі непередбачувані обставини (наприклад, збій сервера) наш файл не був збережений належним чином.

Тепер, щоб відновити незбережені дані цього файлу, нам потрібно просто відредагувати файл під назвою ..swp.

Команда ‘ls -al’ покаже .swp файл вашого оригінального файлу, який був збережений у віртуальній пам'яті (swap memory).

Після редагування файлу просто збережіть його, і все буде в порядку. Також після виконання необхідних операцій видаліть старий .filename.swp файл.

Виклик зовнішніх бінарних файлів або файлів всередині vim:

Іноді нам може знадобитися вставити вивід інших команд безпосередньо у файл, який редагуємо.

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

У таких випадках ми можемо використовувати цю техніку для досягнення потрібного результату.

:r!  : Виклик зовнішніх бінарних файлів у файлі  
:r  : Копіювати вміст зовнішнього файлу в поточний файл  

**Приклади:**  
:r! netstat -tulpn | grep LISTEN  
-> Це виведе результат цієї команди в поточний файл  

:r /etc/passwd  
-> Це скопіює вміст /etc/passwd в поточний файл

Зміна літер, слів або цілих рядків на ВЕЛИКІ чи маленькі:

Це виконується в режимі Ex редактора vim.

**ПРИМІТКА: X** позначає число (або ціле значення)  

**Для ВЕЛИКИХ ЛІТЕР  
-------------  
Для літер:**Перемістіть курсор на першу літеру, потім введіть**gUX** і натискайте клавішу праворуч.  

**Для слів:**  
Розмістіть курсор на початку слова, потім введіть **gUXw  

Для цілого рядка:**  
  Розмістіть курсор у будь-якому місці рядка, потім введіть **gUU  

ПРИМІТКА:**  
  Для **малогих літер,** все те ж саме, за винятком того, що замість 'U' слід використовувати 'u' у кожній команді.

Більше про Vi/ViM:

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

  1. man vim -> Це покаже man сторінку для редактора vim.
    2.
    vimtutor -> Це вбудований тренажер для редактора Vi/ViM в Linux системах.

Висновок

У цій статті ми багато говорили про редактор Vi/ViM і як ми можемо ефективно використовувати його для роботи з текстовими даними.

Однак є ще багато порад і трюків, які ми не охопили. Будь ласка, не соромтеся поділитися ними в розділі коментарів нижче.

Дякуємо за ваш час.

Перекладено з: Mastering Vi/ViM Editor

Leave a Reply

Your email address will not be published. Required fields are marked *