15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
08.10.2024

Як використовувати редактор Vi/Vim на Ubuntu: Повний технічний довідник

Vi та Vim (Vi Improved) — це модальні текстові редактори з керуванням за допомогою клавіатури, що працюють повністю в терміналі, що робить їх незамінними для адміністрування серверів, редагування конфігурацій віддалено та роботи зі скриптами на Ubuntu та інших дистрибутивах Linux. Vim розширює Vi підсвічуванням синтаксису, багаторівневим скасуванням дій, розділеними вікнами, підтримкою плагінів і шаром конфігурації зі скриптами — при цьому споживаючи мінімальні системні ресурси.

Якщо ви керуєте середовищем VPS Хостингу або виділеним сервером, вільне володіння Vim — це не опція, а базова навичка. SSH-сесії не завжди мають доступ до графічного інтерфейсу, а Vim практично універсально доступний у кожній Unix-подібній системі, з якою вам доведеться працювати.

Чому Vim досі домінує в серверних середовищах

Сучасні IDE потужні, але вони не мають значення, коли ви підключені до headless-сервера Ubuntu через SSH о 2 годині ночі та налагоджуєте зламану конфігурацію Nginx. Модальний дизайн Vim означає, що кожне натискання клавіші є командою — немає залежності від миші, немає накладних витрат на рендеринг і немає затримки, спричиненої графічним шаром.

Основні причини, чому системні адміністратори покладаються на Vim:

  • Нульові зовнішні залежності: Працює через будь-яке SSH-з’єднання, включаючи канали з низькою пропускною здатністю або високою затримкою
  • Стабільна доступність: Попередньо встановлений або легко встановлюваний на Debian, Ubuntu, CentOS, Alpine та практично кожному дистрибутиві Linux
  • Швидкість у масштабі: Редагування конфігураційних файлів, лог-файлів або скриптів з тисячами рядків у Vim відбувається швидше, ніж у будь-якому графічному редакторі після напрацювання м’язової пам’яті
  • Можливість скриптування: Вбудована мова скриптів Vim (Vimscript) та підтримка Lua (у Neovim) дозволяють повністю автоматизувати повторювані завдання редагування

Встановлення Vim на Ubuntu

Ubuntu постачається з мінімальним пакетом `vim-tiny`, якому бракує підсвічування синтаксису, підтримки кількох файлів та багатьох розширених функцій. Для повної функціональності встановіть повний пакет:

“`bash

sudo apt update

sudo apt install vim -y

“`

Щоб перевірити встановлену версію та підтвердити повну підтримку функцій:

“`bash

vim –version

“`

Шукайте `+syntax`, `+clipboard`, `+python3` та `+multi_byte` у прапорцях функцій. Префікс `-` означає, що ця функція була виключена з бінарного файлу під час компіляції. Якщо вам потрібні ці функції, але вони відсутні, встановіть натомість `vim-gtk3` або `vim-nox`:

“`bash

sudo apt install vim-nox -y # Headless full-feature build

sudo apt install vim-gtk3 -y # GTK3 build with clipboard integration

“`

Критичний граничний випадок: На мінімальних образах сервера Ubuntu — таких як ті, що використовуються в Docker-контейнерах або Виділених Серверах, завантажених через cloud-init — навіть `vi` може бути відсутнім. У такому випадку явно встановіть `vim` перед спробою редагування будь-яких конфігураційних файлів.

Відкриття, створення та відновлення файлів

“`bash

vim filename.txt # Open existing file or create new one

vim /etc/nginx/nginx.conf # Open a system configuration file (use sudo if needed)

sudo vim /etc/ssh/sshd_config # Edit privileged files

vim +42 filename.txt # Open file and jump directly to line 42

vim +/searchterm file.txt # Open file with cursor on first match of searchterm

“`

Відновлення з файлу підкачки: Vim автоматично створює прихований файл підкачки (`.filename.txt.swp`) під час редагування. Якщо ваша сесія завершилася аварійно або SSH-з’єднання обірвалося, знову відкрийте той самий файл, і Vim запропонує вам відновити незбережені зміни. Завжди спочатку вибирайте `(R)ecover`, збережіть відновлений вміст, а потім видаліть файл підкачки за допомогою `:e`, після чого `:!rm ~/.filename.txt.swp`, або запустивши `vim -r filename.txt`.

Цей механізм відновлення особливо цінний при редагуванні критичних конфігураційних файлів на виробничих серверах — обрив з’єднання не означає втрату роботи.

Розуміння модальної архітектури Vim

Модальний дизайн Vim — це єдина найважливіша концепція для засвоєння. На відміну від стандартних редакторів, де кожне натискання клавіші вставляє символ, Vim розділяє навігацію, редагування та виконання команд на окремі режими.

РежимАктиваціяОсновне призначення
**Normal**`Esc` (за замовчуванням при відкритті)Навігація, видалення, копіювання, вставка, виконання макросів
**Insert**`i`, `a`, `o`, `O`, `I`, `A`Введення та вставка тексту
**Visual**`v` (символьний), `V` (рядковий), `Ctrl+v` (блочний)Виділення текстових діапазонів
**Visual Block**`Ctrl+v`Виділення та редагування за стовпцями
**Command-Line**`:`Операції з файлами, пошук/заміна, налаштування, зовнішні команди
**Replace**`R`Перезапис існуючих символів
**Ex**`Q`Пакетне виконання команд (рідко використовується інтерактивно)

Найпоширеніша помилка початківців — натискання клавіш у режимі Normal з очікуванням появи тексту, а потім паніка, коли `dd` видаляє рядок або `gg` переміщується на початок файлу. Завжди перевіряйте поточний режим у нижньому лівому куті екрана — режим Insert відображає `– INSERT –`, режим Visual відображає `– VISUAL –`, а режим Normal нічого не показує.

Команди навігації в режимі Normal

Ефективна навігація — це те, що відрізняє користувача Vim, який просто функціонує, від того, хто справді швидкий. Вивчайте їх у порядку пріоритету:

Базовий рух курсора

КлавішаДія
`h`Перемістити ліворуч на один символ
`l`Перемістити праворуч на один символ
`j`Перемістити вниз на один рядок
`k`Перемістити вгору на один рядок
`w`Перейти на початок наступного слова
`b`Перейти на початок попереднього слова
`e`Перейти в кінець поточного слова
`0`Перейти на початок рядка
`^`Перейти до першого символу рядка, що не є пробілом
`$`Перейти в кінець рядка

Навігація на рівні файлу

КлавішаДія
`gg`Перейти до першого рядка файлу
`G`Перейти до останнього рядка файлу
`:42`Перейти до рядка 42
`Ctrl+f`Прокрутити на одну повну сторінку вперед
`Ctrl+b`Прокрутити на одну повну сторінку назад
`Ctrl+d`Прокрутити на пів сторінки вниз
`Ctrl+u`Прокрутити на пів сторінки вгору
`%`Перейти до відповідної дужки, круглої або фігурної дужки
`*`Перейти до наступного входження слова під курсором
`#`Перейти до попереднього входження слова під курсором

Порада для досвідчених користувачів: Додайте перед будь-якою командою руху число, щоб повторити її. `5j` переміщує вниз на 5 рядків. `3w` переходить вперед на 3 слова. `10dd` видаляє 10 рядків. Цей числовий множник застосовується практично до кожної команди режиму Normal і є ключем до швидкого редагування.

Вхід та вихід з режиму Insert

КлавішаПоведінка
`i`Вставити перед курсором
`a`Додати після курсора
`I`Вставити на початку рядка
`A`Додати в кінці рядка
`o`Відкрити новий рядок нижче та перейти в режим Insert
`O`Відкрити новий рядок вище та перейти в режим Insert
`s`Видалити символ під курсором та перейти в режим Insert
`S`Видалити весь рядок та перейти в режим Insert
`Esc` або `Ctrl+[`Повернутися до режиму Normal

Критична звичка: Виробіть рефлекс натискання `Esc` одразу після завершення введення тексту. Залишатися в режимі Insert, коли ви маєте намір навігувати, є джерелом більшості випадкових правок.

Збереження, вихід та керування файлами

Ці команди виконуються з режиму Command-Line (спочатку натисніть `:`):

КомандаДія
`:w`Зберегти (записати) поточний файл
`:w filename.txt`Зберегти під новим ім’ям файлу
`:q`Вийти (лише якщо немає незбережених змін)
`:q!`Примусовий вихід із відкиданням усіх незбережених змін
`:wq` або `:x`Зберегти та вийти
`ZZ`Зберегти та вийти (скорочення в режимі Normal)
`ZQ`Вийти без збереження (скорочення в режимі Normal)
`:w !sudo tee %`Зберегти файл, відкритий без привілеїв sudo

Трюк `:w !sudo tee %` є обов’язковим знанням для системних адміністраторів. Коли ви відкриваєте системний файл на зразок `/etc/fstab` без sudo та вносите зміни, ви не можете зберегти за допомогою `:w`. Ця команда передає вміст буфера через `sudo tee` для запису файлу з підвищеними привілеями — без необхідності закривати та повторно відкривати Vim.

Операції редагування: видалення, копіювання, вставка та скасування

Модель редагування Vim побудована на операторах + рухах. Оператор (наприклад, `d` для видалення або `y` для yank/копіювання) у поєднанні з рухом (наприклад, `w` для слова або `$` для кінця рядка) створює точну дію редагування.

Основні команди редагування

КомандаДія
`x`Видалити символ під курсором
`X`Видалити символ перед курсором
`dd`Видалити (вирізати) весь поточний рядок
`D`Видалити від курсора до кінця рядка
`dw`Видалити від курсора до кінця слова
`d$`Видалити від курсора до кінця рядка
`d0`Видалити від курсора до початку рядка
`yy` або `Y`Скопіювати (yank) весь поточний рядок
`yw`Скопіювати від курсора до кінця слова
`p`Вставити після курсора (або нижче поточного рядка для рядкових копіювань)
`P`Вставити перед курсором (або вище поточного рядка)
`u`Скасувати останню зміну
`Ctrl+r`Повторити останню скасовану зміну
`.`Повторити останню зміну (одна з найпотужніших команд у Vim)
`~`Змінити регістр символу під курсором
`>>`Збільшити відступ поточного рядка на один рівень
`<<`Зменшити відступ поточного рядка на один рівень

Команда `.` (крапка) є, мабуть, найбільш недооціненою функцією Vim серед початківців. Вона повторює вашу останню складену дію — якщо ви видалили слово за допомогою `dw`, натискання `.` видаляє наступне слово. Якщо ви змінили слово за допомогою `cw` та ввели заміну, `.` застосовує ту саму заміну до наступного входження. Це усуває повторне ручне редагування у великих файлах.

Режим Visual: точне виділення тексту

Режим Visual надає три рівні деталізації виділення:

  • `v` — Посимвольне виділення
  • `V` — Порядкове виділення (виділяє цілі рядки)
  • `Ctrl+v` — Блочне виділення (редагування стовпців)

Після виділення застосуйте оператори:

КлавішаДія над виділенням
`d`Видалити виділений текст
`y`Скопіювати (yank) виділений текст
`c`Змінити (видалити та перейти в режим Insert)
`>`Збільшити відступ виділення
`<`Зменшити відступ виділення
`~`Змінити регістр виділення
`:`Перейти в режим Command-Line з попередньо заповненим діапазоном

Реальний приклад використання блочного режиму Visual (`Ctrl+v`): У вас є конфігураційний файл, де потрібно закоментувати 15 послідовних рядків, додавши `#` на початку. Виділіть перший стовпець цих рядків за допомогою `Ctrl+v`, перейдіть вниз за допомогою `j`, натисніть `I` (велика літера i), введіть `#`, а потім натисніть `Esc`. Vim застосовує вставку до кожного виділеного рядка одночасно. Це завдання, яке потребувало б регулярного виразу або ручного повторення в більшості інших редакторів.

Пошук та заміна

Пошук

“`

/pattern Search forward for pattern (regex supported)

?pattern Search backward for pattern

n Jump to next match

N Jump to previous match

  • Search forward for word under cursor

Search backward for word under cursor

:noh Clear search highlighting

“`

Синтаксис пошуку та заміни

“`

:%s/old/new/g Replace all occurrences in entire file

:%s/old/new/gc Replace all with confirmation prompt for each

:%s/old/new/gi Case-insensitive replace across entire file

:10,20s/old/new/g Replace only within lines 10 through 20

:'<,'>s/old/new/g Replace within visually selected range

:%s/bwordb/new/g Replace whole word only (word boundary anchors)

“`

Підтримка регулярних виразів: Vim використовує власний діалект регулярних виразів. Доступні `b` для межі слова, `d` для цифр, `s` для пробілів та `+` (один або більше). Для розширеного синтаксису регулярних виразів додайте префікс `v`: `:%s/v(foo|bar)/baz/g` відповідає “foo” або “bar” та замінює на “baz”.

Робота з кількома файлами, буферами та розділеними вікнами

Саме тут потужність Vim стає найбільш очевидною для складних сесій редагування.

Буфери

Буфер — це представлення файлу в пам’яті. Vim може одночасно тримати відкритими багато буферів.

“`

:e filename Open a file into a new buffer

:ls or :buffers List all open buffers

:b2 Switch to buffer number 2

:bnext or :bn Switch to next buffer

:bprev or :bp Switch to previous buffer

:bd Delete (close) current buffer

“`

Розділені вікна

“`

:split filename Horizontal split, open file in upper pane

:vsplit filename Vertical split, open file in right pane

Ctrl+w h/j/k/l Navigate between split panes

Ctrl+w = Equalize split pane sizes

Ctrl+w q Close current pane

“`

Вкладки

“`

:tabnew filename Open file in a new tab

:tabnext or gt Switch to next tab

:tabprev or gT Switch to previous tab

:tabclose Close current tab

“`

Практичний сценарій: При редагуванні конфігурації веб-сервера на VPS з cPanel вам може знадобитися звернутися до основного `nginx.conf` під час редагування файлу віртуального хоста. Відкрийте обидва у вертикальному розділенні за допомогою `:vsplit /etc/nginx/nginx.conf` та переміщуйтеся між панелями за допомогою `Ctrl+w l` та `Ctrl+w h` — не потрібно закривати один файл, щоб переглянути інший.

Налаштування Vim за допомогою .vimrc

Файл `.vimrc` у вашому домашньому каталозі є постійною конфігурацією Vim. Він виконується як Vimscript кожного разу при запуску Vim.

“`bash

vim ~/.vimrc

“`

Рекомендована конфігурація для виробничого сервера

“`vim

" Display settings

set number " Show absolute line numbers

set relativenumber " Show relative line numbers (great for jump commands)

set cursorline " Highlight the current line

set scrolloff=8 " Keep 8 lines visible above/below cursor when scrolling

" Indentation

set autoindent " Copy indent from current line on new line

set smartindent " Context-aware indentation for code

set expandtab " Convert tabs to spaces

set tabstop=4 " Tab width = 4 spaces

set shiftwidth=4 " Indentation width for >> and <<

" Search behavior

set hlsearch " Highlight all search matches

set incsearch " Show matches as you type

set ignorecase " Case-insensitive search

set smartcase " Override ignorecase if search contains uppercase

" Usability

set mouse=a " Enable mouse in all modes

syntax on " Enable syntax highlighting

set encoding=utf-8 " Default encoding

set clipboard=unnamedplus " Use system clipboard for yank/paste

set undofile " Persist undo history across sessions

set undodir=~/.vim/undo " Directory for persistent undo files

" Visual

set showmatch " Briefly jump to matching bracket

set laststatus=2 " Always show status line

set wildmenu " Enhanced command-line completion

“`

Важливо: Директива `set undofile` створює постійну історію скасувань, що зберігається на диску. Це означає, що ви можете закрити файл, відкрити його через кілька днів і все одно скасувати зміни з попередньої сесії. Створіть каталог для скасувань перед увімкненням цієї функції:

“`bash

mkdir -p ~/.vim/undo

“`

Це особливо цінно при внесенні поступових змін до конфігураційних файлів на виробничих системах — наприклад, при налаштуванні PHP-FPM або коригуванні параметрів SSL на сервері з SSL Сертифікатами для кількох доменів.

Макроси: автоматизація повторюваних правок

Макроси — одна з найпотужніших і найменш використовуваних функцій Vim. Макрос записує послідовність натискань клавіш та відтворює їх.

“`

qa Start recording macro into register 'a'

[actions] Perform any sequence of Normal/Insert mode commands

q Stop recording

@a Replay macro stored in register 'a'

@@ Replay the last executed macro

10@a Replay macro 'a' ten times

“`

Реальний приклад: У вас є CSV-файл з 200 рядками, і потрібно взяти друге поле кожного рядка в подвійні лапки. Запишіть макрос на першому рядку, відтворіть його 199 разів за допомогою `199@a`, і перетворення завершиться менш ніж за секунду. Скриптування не потрібне.

Мітки та переходи

Мітки дозволяють вам позначати позиції у файлі та миттєво повертатися до них.

“`

ma Set mark 'a' at current cursor position

'a Jump to the line of mark 'a'

`a Jump to the exact position of mark 'a'

'' Jump back to position before last jump

Ctrl+o Jump to previous position in jump list

Ctrl+i Jump to next position in jump list

:marks List all current marks

“`

Vim проти Nano проти Emacs: вибір правильного термінального редактора

ФункціяVimNanoEmacs
**Крива навчання**Крута (модальна система)МінімальнаДуже крута
**Час запуску**Майже миттєвийМайже миттєвийПовільніший
**Використання пам’яті**Дуже низькеДуже низькеВід помірного до високого
**Підсвічування синтаксису**ПовнеБазовеПовне
**Екосистема плагінів**РозширенаМінімальнаРозширена
**Підтримка макросів**Вбудована, потужнаВідсутняВбудована
**Розділені вікна**ТакНіТак
**Віддалене редагування**Через SSH нативноЧерез SSH нативноПротокол TRAMP
**Складність конфігурації**Помірна (.vimrc)МінімальнаВисока (Elisp)
**Найкраще для**Досвідчених користувачів, системних адміністраторівШвидких правок, початківцівРозробників, користувачів Lisp

Для завдань адміністрування серверів — редагування конфігураційних файлів, написання shell-скриптів, перегляду логів — Vim забезпечує найкращий баланс потужності, доступності та швидкості. Nano прийнятний для разових правок, коли ви не можете дозволити собі когнітивне навантаження. Emacs є законним вибором для розробників, які живуть у терміналі, але його споживання ресурсів та час запуску роблять його менш практичним у обмежених серверних середовищах.

Поширені помилки та як їх уникнути

1. Редагування виробничих файлів без резервної копії

Завжди створюйте резервну копію перед редагуванням критичних системних файлів:

“`bash

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

sudo vim /etc/nginx/nginx.conf

“`

2. Забуття використати sudo

Якщо ви відкрили привілейований файл без sudo та внесли зміни, використовуйте `:w !sudo tee %` для збереження без втрати правок.

3. Плутанина з регістрами

Коли ви видаляєте текст за допомогою `dd`, він потрапляє до регістра за замовчуванням `"`. Якщо потім скопіювати щось за допомогою `yy`, видалений текст буде перезаписаний. Щоб зберегти скопійоване перед видаленням, використовуйте іменовані регістри: `"ayy` копіює в регістр `a`, а `"ap` вставляє з нього.

4. Залишення файлів підкачки на спільних системах

Файли підкачки Vim у `/tmp` або робочому каталозі можуть збентежити інших користувачів або автоматизовані процеси. Налаштуйте окремий каталог для файлів підкачки у `.vimrc`:

“`vim

set directory=~/.vim/swap//

“`

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

5. Проблеми з закінченнями рядків у міжплатформних файлах

Якщо ви редагуєте файл, що походить з Windows, він може мати закінчення рядків CRLF (`rn`). Vim відображатиме `^M` в кінці кожного рядка. Виправте це за допомогою:

“`bash

:%s/r//g

“`

Практичний контрольний список ключових висновків

Використовуйте це як матрицю швидкого прийняття рішень до та під час сесій Vim:

  • Перед редагуванням будь-якого виробничого файлу: Створіть резервну копію з міткою часу за допомогою `cp file file.$(date +%Y%m%d%H%M%S).bak`
  • Усвідомлення режиму: Якщо натискання клавіш не вставляють текст, натисніть `Esc` та перевірте свій режим
  • Звичка швидкого збереження: Натискайте `Esc`, а потім `:w` після кожної значної зміни — не чекайте до кінця
  • Використовуйте `:set number` тимчасово, якщо вам потрібно перейти до певного рядка і у вас немає цього в `.vimrc`
  • Для глобального пошуку/заміни: Завжди тестуйте з `:%s/old/new/gc` (з підтвердженням) перед сліпим запуском `:%s/old/new/g`
  • Запит файлу підкачки при відкритті: Завжди вибирайте `(R)ecover`, збережіть вміст, а потім видаліть файл підкачки
  • Для редагування стовпців: Використовуйте блочний режим Visual `Ctrl+v` замість ручного повторення
  • Постійне скасування: Налаштуйте `set undofile` у `.vimrc` на будь-якому сервері, яким ви регулярно адмініструєте
  • Інтеграція з буфером обміну: Якщо `p` вставляє несподіваний вміст, перевірте, що `set clipboard=unnamedplus` встановлено та що `xclip` або `xsel` встановлено
  • У разі сумнівів: `:help keyword` відкриває вбудовану документацію для будь-якої команди або опції

Незалежно від того, чи керуєте ви конфігураційними файлами в середовищах Спільного Веб-Хостингу, чи підтримуєте складну інфраструктуру на Виділених Серверах, ефективність Vim накопичується з часом — кожна засвоєна команда назавжди усуває тертя з вашого робочого процесу.

FAQ

П: У чому різниця між Vi та Vim на Ubuntu?

`vi` на сучасних системах Ubuntu зазвичай є символічним посиланням на `vim` у режимі зниженої сумісності або на `vim-tiny`. Справжній Vi — це оригінальний редактор 1976 року без підсвічування синтаксису, без багаторівневого скасування та без підтримки плагінів. Vim додає понад 100 функцій поверх Vi, залишаючись повністю зворотно сумісним з прив’язками клавіш Vi.

П: Як вийти з Vim, якщо я повністю застряг?

Натисніть `Esc` кілька разів, щоб переконатися, що ви в режимі Normal, потім введіть `:q!` та натисніть Enter. Це примусово виходить без збереження. Якщо навіть це не допомагає (рідко, але можливо в рекурсивних станах команд), спочатку натисніть `Ctrl+c`, а потім `:q!`.

П: Чи може Vim редагувати файли через SSH без їх локального копіювання?

Так. Використовуйте `vim scp://user@hostname//path/to/file` для безпосереднього редагування віддалених файлів через SCP. Vim прозоро обробляє передачу. Крім того, використовуйте `rsync` для отримання файлу, локального редагування та відправки назад — це швидше для великих файлів.

П: Як увімкнути підсвічування синтаксису для певного типу файлу, який Vim не розпізнає?

Запустіть `:set filetype=nginx` (або `python`, `yaml`, `bash` тощо), щоб вручну призначити тип файлу для поточної сесії. Щоб зробити це постійним для певного розширення файлу, додайте `autocmd BufRead,BufNewFile *.conf set filetype=nginx` до вашого `.vimrc`.

П: Чи є Neovim кращим вибором, ніж Vim для використання на сервері?

Для чистих завдань адміністрування серверів стандартний Vim є достатнім і більш універсально доступним. Neovim пропонує конфігурацію на основі Lua, кращу підтримку асинхронних плагінів та вбудований LSP-клієнт — переваги, які мають значення насамперед для робочих процесів розробки. На виробничих серверах, де ви встановлюєте лише необхідне, Vim залишається прагматичним вибором.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати