Как использовать Vim на Linux VPS

14 мин чтения·Matthieu·server-administrationsshtext-editorlinuxvim|

Практическое руководство по Vim на основе реальных задач администрирования сервера. Режимы, навигация, редактирование, поиск и замена, сплиты, настройка .vimrc и рабочие процессы для редактирования файлов Nginx, SSH и Docker Compose через SSH.

Vim — текстовый редактор по умолчанию на большинстве серверов Linux. Когда ты подключаешься по SSH к VPS, чтобы отредактировать конфигурацию Nginx, сменить порт SSH или подправить файл Docker Compose, Vim — это то, что тебя ждёт. Это руководство учит Vim через реальные задачи администрирования сервера, а не абстрактные примеры.

Ты узнаешь, как работают режимы Vim, как эффективно перемещаться по файлам и редактировать их, как искать и заменять текст, как работать с несколькими файлами через сплиты и буферы, и как настроить .vimrc, который ускорит работу на сервере.

Требования: Linux VPS (Debian или Ubuntu) с доступом по SSH. Базовое знакомство с терминалом (выполнение команд, навигация по каталогам).

Как установить Vim на Ubuntu или Debian?

Большинство серверов Debian и Ubuntu поставляются с vim-tiny — урезанной версией без подсветки синтаксиса, истории отмен и поддержки плагинов. Установи полную версию, чтобы получить все возможности, описанные в этом руководстве.

sudo apt update && sudo apt install vim -y

Проверь установку:

vim --version | head -1

Ожидаемый вывод на Debian 12 (Bookworm):

VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Nov 15 2023 17:28:07)

На Ubuntu 24.04 LTS ты увидишь Vim 9.1. Конкретная версия патча зависит от дистрибутива, но все функции этого руководства работают в Vim 8.2 и новее.

А что насчёт Neovim? Neovim — это форк Vim с конфигурацией на Lua и встроенной поддержкой LSP. Всё в этом руководстве применимо к Neovim, кроме пути к .vimrc (Neovim использует ~/.config/nvim/init.vim). Если предпочитаешь Neovim, установи его командой sudo apt install neovim.

Запусти встроенный учебник

Vim поставляется с интерактивным учебником, который занимает около 30 минут. Запусти его перед чтением дальше, если ты никогда не пользовался Vim:

vimtutor

Откроется тренировочный файл, где ты учишься на практике. Он покрывает основы перемещения и редактирования. Остальная часть статьи идёт глубже и добавляет серверные рабочие процессы, которые vimtutor не охватывает.

Что такое режимы Vim и как они работают?

У Vim четыре основных режима. Нормальный режим (Normal mode) — режим по умолчанию. В нём ты перемещаешься и выполняешь команды. Режим вставки (Insert mode) — для ввода текста, вход через i. Визуальный режим (Visual mode) — для выделения текста, вход через v. Командный режим (Command-line mode) — для выполнения команд вроде сохранения и выхода, вход через :. Нажми Esc, чтобы вернуться в нормальный режим из любого другого.

Это отличается от редакторов вроде nano, где ты сразу набираешь текст. В Vim нажатия клавиш в нормальном режиме — это команды, а не символы. Это называется модальное редактирование.

Режим Вход Назначение Возврат в нормальный
Нормальный Esc (или открытие файла) Навигация, удаление, копирование, вставка, выполнение команд Уже в нормальном режиме
Вставка i, a, o, I, A, O Ввод и редактирование текста Esc
Визуальный v (символ), V (строка), Ctrl+v (блок) Выделение текста для операций Esc
Командный : Выполнение ex-команд (сохранить, выйти, найти, заменить) Enter или Esc

Индикатор режима отображается в левом нижнем углу экрана. Когда видишь -- INSERT --, ты в режиме вставки. Когда ничего не показано — в нормальном режиме.

Если чувствуешь, что застрял: нажми Esc два-три раза. Это всегда вернёт тебя в нормальный режим вне зависимости от текущего состояния.

Как перемещаться по файлам в Vim?

Навигация в Vim происходит в нормальном режиме. Базовые клавиши перемещения: h (влево), j (вниз), k (вверх) и l (вправо). Стрелки тоже работают, но hjkl держит пальцы на основном ряду и после привыкания работает быстрее.

Перемещение по символам и строкам

Клавиша Действие
h На один символ влево
j На одну строку вниз
k На одну строку вверх
l На один символ вправо
0 В начало строки
$ В конец строки
^ К первому непробельному символу

Перемещение по словам

Клавиша Действие
w К началу следующего слова
b К началу предыдущего слова
e К концу текущего слова
W К следующему СЛОВУ (разделённому пробелами)
B К предыдущему СЛОВУ

Перемещение по файлу

Клавиша Действие
gg К первой строке файла
G К последней строке файла
42G или :42 К строке 42
Ctrl+d Прокрутить на полстраницы вниз
Ctrl+u Прокрутить на полстраницы вверх
Ctrl+f Прокрутить на страницу вниз
Ctrl+b Прокрутить на страницу вверх
% К парной скобке ((, {, [)

Навигация поиском

Нажми / для поиска вперёд, введи поисковый запрос и нажми Enter. Нажми n для перехода к следующему совпадению, N — к предыдущему. Нажми ? для поиска назад.

Пример: ты редактируешь /etc/nginx/nginx.conf и нужно найти директиву worker_connections:

/worker_connections

Vim перейдёт к первому совпадению. Нажми n, чтобы пройти по всем совпадениям в файле.

Как редактировать текст в Vim?

Редактирование в Vim следует паттерну: оператор + движение. Оператор говорит, что делать (удалить, изменить, скопировать). Движение говорит, к какому тексту применить (слово, строка, абзац). Эта компонуемость делает Vim быстрым, как только ты освоишь несколько базовых блоков.

Вход в режим вставки

Клавиша Действие
i Вставить перед курсором
a Добавить после курсора
I Вставить в начало строки
A Добавить в конец строки
o Открыть новую строку ниже и войти в режим вставки
O Открыть новую строку выше и войти в режим вставки

Удаление, изменение, копирование и вставка

Команда Действие
x Удалить символ под курсором
dd Удалить всю строку
dw Удалить от курсора до начала следующего слова
d$ или D Удалить от курсора до конца строки
cc Изменить всю строку (удаляет и переходит в режим вставки)
cw Изменить слово (удаляет слово и переходит в режим вставки)
ci" Изменить внутри кавычек (удаляет текст между " и переходит в режим вставки)
yy Скопировать (yank) всю строку
yw Скопировать слово
p Вставить (put) после курсора
P Вставить перед курсором

Отмена и повтор

Клавиша Действие
u Отменить последнее изменение
Ctrl+r Повторить (отменить отмену)
. Повторить последнее изменение

Команда . (точка) — одна из самых полезных возможностей Vim. Она повторяет то, что ты сделал последним. Измени слово через cw, набери замену, нажми Esc. Теперь перейди к другому слову и нажми ., чтобы выполнить то же изменение.

Примеры редактирования, связанные с сервером

Удалить директиву из конфигурации Nginx: Поставь курсор на строку access_log /var/log/nginx/access.log; и нажми dd, чтобы удалить всю строку.

Изменить номер порта в кавычках: Поставь курсор в любое место внутри "8080" в файле Docker Compose и нажми ci". Это удалит 8080 и переведёт тебя в режим вставки. Набери 3000 и нажми Esc.

Удалить два слова из директивы: Нажми d2w, чтобы удалить два следующих слова от позиции курсора. Команды Vim принимают число перед движением: 3dd удаляет три строки, 5j перемещает на пять строк вниз.

Как искать и заменять текст в Vim?

Используй :s (substitute) для замены текста. Базовый синтаксис: :s/старый/новый/флаги. По умолчанию команда действует на текущую строку. Используй :%s, чтобы применить ко всему файлу.

Шаблоны замены

Команда Действие
:s/foo/bar/ Заменить первый foo на bar в текущей строке
:s/foo/bar/g Заменить все foo на bar в текущей строке
:%s/foo/bar/g Заменить все foo на bar во всём файле
:%s/foo/bar/gc Заменить все с подтверждением (y/n для каждого совпадения)
:5,10s/foo/bar/g Заменить все в строках с 5 по 10

Практические примеры

Изменить порт прослушивания Nginx с 80 на 443:

:%s/listen 80;/listen 443 ssl;/g

Закомментировать строку в sshd_config: Перейди на строку, нажми I для вставки в начало, набери #, нажми Esc.

Закомментировать несколько строк: Выдели строки через V (визуальный режим строк), расширь выделение клавишей j, затем набери :s/^/#/ и нажми Enter. Это добавит # в начало каждой выделенной строки.

Заменить тег Docker-образа:

:%s/nginx:1.24/nginx:1.27/g

Основы регулярных выражений в замене Vim

Vim использует свой синтаксис регулярных выражений. Несколько паттернов, которые ты будешь часто использовать при работе с серверными конфигами:

Паттерн Совпадает с
^ Начало строки
$ Конец строки
. Любой одиночный символ
\d Цифра (0-9)
.* Любые символы (жадный)
\s Пробельный символ

Чтобы найти буквальные точки (как в IP-адресах), экранируй их: :%s/192\.168\.1\.1/10.0.0.1/g.

Как редактировать несколько файлов в Vim с помощью сплитов и буферов?

Vim может открывать несколько файлов в одной сессии с помощью буферов, разделённых окон и вкладок. Это полезно, когда нужно сверяться с файлами при редактировании, например, смотреть nginx.conf при редактировании конкретного server-блока.

Буферы

Буфер — это файл, загруженный в память. Можно держать много буферов открытыми и переключаться между ними.

Команда Действие
:e /etc/nginx/sites-available/default Открыть файл в новом буфере
:bn Переключиться на следующий буфер
:bp Переключиться на предыдущий буфер
:ls Показать все открытые буферы
:b2 Переключиться на буфер номер 2
:bd Закрыть текущий буфер

Разделённые окна

Сплиты позволяют видеть два файла рядом в одном терминале.

Команда Действие
:sp /путь/к/файлу Горизонтальный сплит (верх/низ)
:vs /путь/к/файлу Вертикальный сплит (лево/право)
Ctrl+w h/j/k/l Перемещение между сплитами (лево/низ/верх/право)
Ctrl+w = Сделать все сплиты одинакового размера
Ctrl+w q Закрыть текущий сплит

Пример рабочего процесса: редактировать файл Docker Compose, параллельно просматривая файл .env:

:e docker-compose.yml
:vs .env

Теперь у тебя две панели. Используй Ctrl+w l и Ctrl+w h для переключения между ними.

Вкладки

Вкладки — это коллекции окон. Большинству пользователей сплитов хватает для серверной работы, но вкладки тоже доступны:

Команда Действие
:tabnew /путь/к/файлу Открыть файл в новой вкладке
gt Перейти на следующую вкладку
gT Перейти на предыдущую вкладку
:tabclose Закрыть текущую вкладку

Как настроить Vim с помощью файла .vimrc?

Файл .vimrc в домашнем каталоге управляет поведением Vim. Без него Vim работает в почти совместимом с Vi режиме, в котором не хватает многих функций. Хороший .vimrc, настроенный под серверную работу, ускоряет редактирование конфигурационных файлов.

Создай или отредактируй свой .vimrc:

vim ~/.vimrc

Добавь эти настройки. Каждая строка снабжена поясняющим комментарием:

" Disable Vi compatibility mode (enable all Vim features)
set nocompatible

" Use UTF-8 encoding (required for special characters in listchars on minimal server images)
set encoding=utf-8

" Show line numbers (essential for config files with error messages referencing line numbers)
set number

" Show relative line numbers (makes jumping N lines easy: 5j, 12k)
set relativenumber

" Enable syntax highlighting
syntax on

" Use spaces instead of tabs (most config files expect spaces)
set expandtab

" Set tab width to 2 spaces (common for YAML, Nginx configs)
set tabstop=2
set shiftwidth=2
set softtabstop=2

" Highlight search results as you type
set incsearch
set hlsearch

" Case-insensitive search unless uppercase is used
set ignorecase
set smartcase

" Show matching brackets
set showmatch

" Always show the status line (shows filename and position)
set laststatus=2

" Enable mouse support (useful in modern terminals)
set mouse=a

" Show current mode in status line
set showmode

" Set pastetoggle to F2 (toggle paste mode for clean pasting over SSH)
set pastetoggle=<F2>

" Disable swap files (avoids .swp clutter on servers)
set noswapfile

" Enable filetype detection (loads correct indentation for yaml, json, etc.)
filetype plugin indent on

" Highlight the current line
set cursorline

" Show whitespace characters (catch trailing spaces and mixed indentation)
set list
set listchars=tab:»·,trail:·

Сохрани и выйди через :wq. Настройки вступят в силу при следующем запуске Vim.

Чтобы перезагрузить .vimrc без перезапуска Vim:

:source ~/.vimrc

Режим вставки для SSH-сессий

Когда ты вставляешь текст из локального буфера обмена в Vim через SSH, автоматический отступ может создать каскадный эффект, где каждая строка смещается всё дальше вправо. Это происходит потому, что Vim обрабатывает вставленный текст как набранный с клавиатуры и применяет правила отступов к каждой строке.

Включи режим вставки перед тем, как вставлять:

  1. Нажми F2 (если настроил pastetoggle как показано выше) или набери :set paste
  2. Войди в режим вставки через i
  3. Вставь текст (Ctrl+Shift+V или правый клик в терминале)
  4. Снова нажми F2 или набери :set nopaste

Современные терминалы с Vim 8.2+ поддерживают bracketed paste mode, который решает эту проблему автоматически. Если ты используешь свежий эмулятор терминала (kitty, Alacritty, WezTerm, свежий GNOME Terminal), переключение режима вставки может не понадобиться.

Как добавить плагины с помощью vim-plug?

vim-plug — лёгкий менеджер плагинов, который устанавливает плагины параллельно. Для него нужно скачать один файл и добавить несколько строк в .vimrc.

Установка vim-plug

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Проверь, что файл существует:

ls -la ~/.vim/autoload/plug.vim

Ты должен увидеть файл с твоим пользователем в качестве владельца.

Настройка плагинов в .vimrc

Добавь блок плагинов в начало ~/.vimrc, перед настройками:

call plug#begin('~/.vim/plugged')

" File explorer sidebar
Plug 'preservim/nerdtree'

" Fuzzy file finder
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" Git status indicators in the gutter
Plug 'airblade/vim-gitgutter'

call plug#end()

Сохрани файл и установи плагины:

:source ~/.vimrc
:PlugInstall

vim-plug скачивает каждый плагин параллельно. После установки ты можешь открыть NERDTree через :NERDTree, использовать :Files для нечёткого поиска файлов и видеть маркеры git diff в боковой колонке.

Держи минимум на серверах. Плагины увеличивают время запуска. На VPS, где ты редактируешь конфиги время от времени, трёх-пяти плагинов достаточно. Тяжёлые конфигурации оставь для локальной машины разработки.

Как редактировать серверные конфигурационные файлы через Vim по SSH?

Этот раздел описывает рабочие процессы, которые ты будешь использовать постоянно при управлении VPS. Каждый пример использует реальный файл и показывает точные шаги.

Используй sudoedit вместо sudo vim

Когда редактируешь файлы, принадлежащие root, такие как /etc/nginx/nginx.conf или /etc/ssh/sshd_config, используй sudoedit вместо sudo vim.

sudoedit /etc/nginx/nginx.conf

sudoedit копирует файл во временную директорию, открывает его с твоим пользовательским Vim (включая настройки .vimrc и плагины), а затем копирует обратно с правами root при сохранении и выходе. Это безопаснее sudo vim по двум причинам:

  1. sudo vim запускает Vim от root. Любая команда Vim вроде :!bash открывает root-шелл. На многопользовательских серверах это риск повышения привилегий.
  2. sudoedit сохраняет твоё пользовательское окружение. Ты получаешь свою подсветку синтаксиса, нумерацию строк и горячие клавиши.

Редактирование серверного блока Nginx

Открой конфигурацию сайта по умолчанию:

sudoedit /etc/nginx/sites-available/default

Найди директиву server_name, набрав /server_name и нажав Enter. Vim перейдёт к совпадению. Нажми cw, чтобы изменить слово после директивы, набери свой домен, нажми Esc.

После сохранения проверь синтаксис конфигурации Nginx:

sudo nginx -t

Ожидаемый вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Затем перезагрузи:

sudo systemctl reload nginx

Смена порта SSH в sshd_config

sudoedit /etc/ssh/sshd_config

Найди директиву порта:

/^#\?Port

Этот regex находит и Port, и #Port (закомментированный). Если строка закомментирована, нажми 0, чтобы перейти в начало строки, нажми x, чтобы удалить #, затем нажми f и пробел, чтобы перейти к пробелу перед номером порта. Нажми cw, набери новый номер порта (например, 2222) и нажми Esc.

Проверь конфигурацию:

sudo sshd -t

Отсутствие вывода означает, что синтаксис корректен. Перезапусти сервис:

sudo systemctl restart sshd

Перед отключением открой вторую SSH-сессию на новом порту, чтобы убедиться, что ты по-прежнему можешь подключиться. Потерять SSH-доступ из-за смены порта без проверки — типичная ошибка.

Редактирование файла Docker Compose

vim ~/myapp/docker-compose.yml

YAML-файлы чувствительны к отступам. Настройки .vimrc, заданные ранее (отступ в 2 пробела, expandtab), справляются с этим корректно. Если видишь символы табуляции в YAML-файле, преобразуй их:

:%s/\t/  /g

Это заменит все табы на два пробела. Сохрани и проверь файл:

docker compose config --quiet

Отсутствие вывода означает, что YAML валиден. При синтаксической ошибке Docker Compose выведет номер строки. Перейди к ней в Vim напрямую: vim +42 docker-compose.yml (где 42 — строка с ошибкой).

Редактирование unit-файла systemd

sudoedit /etc/systemd/system/myapp.service

После сохранения изменений в unit-файле systemd перезагрузи daemon:

sudo systemctl daemon-reload

Затем перезапусти сервис и проверь:

sudo systemctl restart myapp
sudo systemctl status myapp

Проверь строку Active: в выводе статуса. Она должна показывать active (running). Если показывает failed, смотри логи:

journalctl -u myapp -n 20 --no-pager

Шпаргалка по Vim

Десять команд, которые нужны с первого дня:

Команда Действие
i Войти в режим вставки
Esc Вернуться в нормальный режим
:wq Сохранить и выйти
:q! Выйти без сохранения
dd Удалить строку
u Отменить
/text Поиск вперёд
:%s/old/new/g Заменить все в файле
:sp file Разделить окно
F2 Переключить режим вставки

Полный справочник с навигацией, редактированием, визуальным режимом, буферами, сплитами, паттернами regex и серверными горячими клавишами смотри в нашей Шпаргалка по Vim.

Что-то пошло не так?

Vim открылся, и я не могу печатать. Ты в нормальном режиме. Нажми i, чтобы перейти в режим вставки.

Вижу -- INSERT --, но клавиши делают странные вещи. Возможно, ты случайно нажал Ctrl+s, что замораживает вывод терминала. Нажми Ctrl+q для разморозки.

Вставленный текст имеет лесенку отступов. Включи режим вставки через F2 или :set paste перед вставкой. Не забудь выключить после: снова F2 или :set nopaste.

Vim пишет "E45: 'readonly' option is set." Файл доступен только для чтения. Выйди через :q и открой заново через sudoedit /путь/к/файлу.

Я допустил ошибку и сохранил. Если это системный конфиг, Vim мог оставить резервную копию. Проверь наличие filename~ в той же директории. Ты также можешь отменить изменения после повторного открытия, если настроил set undofile и set undodir=~/.vim/undodir в .vimrc (сначала создай директорию: mkdir -p ~/.vim/undodir).

Предупреждение о swap-файле: ".file.swp" уже существует. Предыдущая сессия Vim аварийно завершилась или всё ещё открыта. Если никакая другая сессия не редактирует файл, выбери (D)elete для удаления swap-файла. Если ты отключил swap-файлы в .vimrc (set noswapfile), этого не произойдёт.


Дальше: Совмести Vim с терминальным мультиплексором, чтобы твои сессии редактирования выдерживали разрывы соединения. Смотри наше руководство по tmux или по GNU Screen. Примеры конфигурации Nginx из этой статьи подробно рассмотрены в руководстве по администрированию Nginx.


Авторское право 2026 Virtua.Cloud. Все права защищены. Данный контент является оригинальным произведением команды Virtua.Cloud. Воспроизведение, повторная публикация или распространение без письменного разрешения запрещены.

Готовы попробовать?

Разверните свой сервер за секунды. Linux, Windows или FreeBSD.

Смотреть тарифы VPS