Как сохранить и выйти из Vi

Создание и редактирование текстовых файлов — одна из самых базовых задач в Linux. Редактор Vi даёт быстрые и мощные команды для работы с файлами в терминале. Но часто пользователи не уверены, как правильно сохранить и выйти, особенно когда только начинают.
Быстрая терминология
- Normal — режим навигации и выполнения команд; по умолчанию при открытии файла. Однострочное определение: режим управления.
- Insert — режим ввода текста. Однострочное определение: режим редактирования.
Режимы Vi
Vi использует несколько режимов, но для базовой работы достаточно двух:
- Normal (по умолчанию). Навигация, запуск команд, удаление и замены символов.
- Insert. Ввод и изменение текста.
Открыв файл в Vi, вы попадёте в Normal режим. Чтобы начать печатать, нажмите I или i (вставка перед курсором). Для возврата в Normal режим нажмите Esc.
Открытие файла в Vi
Обычная команда для создания или открытия файла:
vi <имя_файла>Пример:
vi textfile.txtЕсли файл уже существует, Vi откроет его. Также можно сначала запустить vi, а потом открыть файл командой в Normal режиме:
:e textfile.txtКак сохранить файл в Vi
Запомните: команды вида “:…” выполняются только из Normal режима. Если вы в Insert, нажмите Esc.
- Сохранить текущий файл (записать буфер на диск):
:w- Сохранить в другой файл (с новым именем):
:w newtextfile.txtСохранить и выйти
Команды для одновременного сохранения и выхода:
:wqили
:xРазница: :x записывает буфер только если есть несохранённые изменения; :wq всегда выполняет запись и обновляет время модификации файла.
Шаги:
- Нажмите Esc, чтобы попасть в Normal режим.
- Введите :wq или :x.
- Нажмите Enter.
Выйти без сохранения
Если нужно закрыть файл и отбросить изменения:
:q!Частые проблемы и способы их решения
Important: многие ошибки при сохранении связаны не с самим Vi, а с правами доступа, с режимом открытия файла или с удалёнными файловыми системами.
- Нет прав на запись (permission denied). Vi откроет файл, но при попытке :w вы получите ошибку. Решения:
- Сохранить через sudo, не выходя из Vi:
:w !sudo tee % >/dev/nullЭто записывает текущий буфер с повышенными правами через sudo.
- Или выйти из Vi и перезапустить с sudo:
sudo vi /path/to/file- Файл на смонтированном readonly разделе. Проверьте mount и remount с записью.
- Нестабильная сеть/AFS/NFS: при потере соединения запись может провалиться. Сохраните локально и затем синхронизируйте.
Советы и приёмы
- Когда сомневаетесь, все изменения сохраняйте в новый файл (:w backup.txt), чтобы не потерять оригинал.
- Используйте :set number для нумерации строк, :set nonumber чтобы убрать.
- Для поиска в Normal режиме введите /текст и нажмите Enter.
- Чтобы отменить последние изменения, используйте u в Normal режиме.
Быстрая шпаргалка команд
i # войти в Insert режим (вставка)
Esc # выйти в Normal режим
:w # сохранить файл
:w имя # сохранить под другим именем
:wq # сохранить и выйти
:x # сохранить только если были изменения, затем выйти
:q! # выйти без сохранения
:e имя # открыть/перейти к файлу (в Normal режиме)
:u # отменить последнее изменение (undo)
/текст # поиск
:set number # показать номера строк
:set nonumber # скрыть номера строкКогда Vi не подходит: альтернативные подходы
- Если вам нужен простой редактор для новичка — используйте nano. Он интуитивен и не требует переключения режимов.
- Для программирования с расширенными возможностями выберите Vim, Neovim или графические IDE (VS Code, JetBrains).
- Для массовых правок в скриптах удобнее sed/awk или редакторы в режиме пакетной обработки.
Ментальные модели (как думать о Vi)
- Думайте о Vi как о «режимной» машине: команды и ввод разделены. Это ускоряет работу, когда вы привыкнете.
- Buffer = рабочая копия файла в памяти. Команды :w и :q действуют на этот буфер и файл на диске.
- Разрешения ОС управляют возможностью записи; Vi только пытается записать.
Решающее дерево для сохранения и выхода
flowchart TD
A[Начать: вы в редакторе Vi] --> B{Есть несохранённые изменения?}
B -- Да --> C{Можно ли записать файл 'права'?}
B -- Нет --> D[Введите :q чтобы выйти]
C -- Да --> E[Введите :wq или :x и нажмите Enter]
C -- Нет --> F{Хотите сохранить под другим именем?}
F -- Да --> G[Введите :w newname и затем :q]
F -- Нет --> H{Можно ли использовать sudo?}
H -- Да --> I[Введите :w !sudo tee % >/dev/null и затем :q]
H -- Нет --> J[Сохраните локально :w /tmp/file и синхронизируйте позже]Ролевые чек-листы
Для новичка:
- Убедитесь, что вы в Normal режиме (Esc).
- Введите :w для сохранения.
- Введите :q! если нужно выйти без сохранения.
Для системного администратора:
- Проверяйте права доступа перед редактированием конфигов.
- Используйте :w !sudo tee % для правки файлов, требующих root.
- Делайте резервную копию: :w /root/file.bak
Для разработчика:
- Используйте :set number для точного указания строк.
- Комбинируйте поиск (/pattern) и замены (:%s/old/new/g).
- Настройте автосохранение в редакторе-оболочке если нужно.
Тесты приёмки (кратко)
- Открыть файл, внести изменение, выполнить :w и убедиться, что файл на диске изменился.
- Внести изменение, выполнить :q! и убедиться, что файл остался без изменений.
- Попытаться :w в файл без прав и проверить, что решение через sudo корректно записывает файл.
Заключение
Vi остаётся важным инструментом для работы в терминале. Простые команды сохранения и выхода — :w, :wq, :x, :q! — покрывают большинство случаев. Если столкнулись с проблемами доступа, используйте способ с sudo или сохраните под временным именем и синхронизируйте изменения позже.
Примечание: практика делает работу с Vi быстрой. Начните с основных команд, затем добавляйте сокращения и макросы по мере необходимости.
Ключевые команды повторно в одном месте:
- :w — сохранить
- :w имя — сохранить под другим именем
- :wq — сохранить и выйти
- :x — сохранить при изменениях и выйти
- :q! — выйти без сохранения
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты