Работа с несколькими окнами в Vim

Введение
Vim часто воспринимают как «простой» консольный редактор, но у него богатые возможности для работы с несколькими окнами. Разделённые окна позволяют одновременно просматривать разные части одного файла, несколько разных файлов или запустить терминал прямо внутри редактора. Ниже — подробное руководство по созданию, навигации, изменению размера и закрытию окон, а также рекомендации по использованию в реальных сценариях.
Основные команды для открытия окон
Перед вводом команд вернитесь в нормальный режим, нажав клавишу Escape.
- Горизонтальное разделение текущего окна:
:split- Вертикальное разделение:
:vsplit- Открыть несколько файлов при запуске Vim (горизонтально):
vim -o file1 file2 file3- Открыть несколько файлов при запуске вертикально:
vim -O file1 file2 file3- Открыть окна для всех уже загруженных буферов в текущей сессии:
:all- Открыть все буферы вертикально:
:vertical allСовет: если нужно заранее задать высоту нового горизонтального окна, поставьте число перед командой split, например:
:3splitЭто откроет окно высотой в 3 строки.
Прокрутка и независимое отображение
Каждое разделённое окно в Vim ведёт себя независимо: можно прокручивать одно окно, не затрагивая другое. Стандартные команды прокрутки применимы к активному окну:
- Вперёд на страницу: Ctrl+F
- Назад на страницу: Ctrl+B
Примечание: сочетание Ctrl+v в Vim обычно используется для визуального блочного режима; чтобы переключить отображение в терминале/GUI на «вертикальное» отображение окон, используйте соответствующие split-команды. В некоторых окружениях терминала поведение Ctrl+v отличается.
Создание новых окон с файлами и терминалом
- Новое пустое окно с возможностью редактирования нового файла:
:new- Открыть встроенный терминал в отдельном окне (работает в Vim 8+ и в Neovim):
:terminal- Выполнить внешнюю команду и показать вывод, затем вернуться в Vim (нажмите Enter, чтобы закрыть вывод):
:!lsВ терминале внутри Vim можно запускать полноэкранные текстовые приложения, командные оболочки и даже дополнительные сессии Vim.
Переключение между окнами
Навигация между окнами выполняется через префикс Ctrl+W и затем направление (аналогично перемещению курсора в Vim):
- Вниз: Ctrl+W j
- Вверх: Ctrl+W k
- Влево: Ctrl+W h
- Вправо: Ctrl+W l
- В самое верхнее окно: Ctrl+W t
- В самое нижнее окно: Ctrl+W b
Также удобно использовать быстрые команды для перемещения на соседнее окно:
Ctrl+W w " циклически перейти к следующему окну
Ctrl+W p " вернуться в предыдущее активное окноПерестановка окон (перемещение активного окна в топ/низ) выполняется сочетаниями с заглавными буквами; обратите внимание на регистр:
- Переместить текущее окно наверх: Ctrl+W K
- Переместить текущее окно влево: Ctrl+W H
- Переместить текущее окно вниз: Ctrl+W J
- Переместить текущее окно вправо: Ctrl+W L
Важно: некоторые окружения терминала перехватывают определённые Ctrl-сочетания; если комбинации не работают, проверьте настройки терминала или переназначьте клавиши в .vimrc.
Изменение размеров окон
- Увеличить высоту активного окна на одну строку: Ctrl+W +
- Уменьшить высоту активного окна на одну строку: Ctrl+W -
- Сделать окно шире: Ctrl+W >
- Сделать окно уже: Ctrl+W <
Также можно задать абсолютную высоту окна:
:resize 20 " установить высоту в 20 строк
:vertical resize 80 " установить ширину в 80 символовСовет: для удобства можно создать быстрые маппинги в ~/.vimrc или init.vim (Neovim).
Закрытие окон и сохранение
- Закрыть текущее окно:
:q- Принудительно закрыть без сохранения:
:q!- Закрыть все окна и выйти из Vim:
:qall
:qall!- Сохранить все буферы:
:wall- Сохранить и закрыть все:
:wqallЧтобы оставить одно окно открытым и закрыть все остальные:
:only
:only!Полезные приёмы и шаблоны работы
- Быстрый обзор файлов проекта: откройте список буферов и примените :ball или :tab ball, затем используйте :bnext/:bprev для перехода.
- Просмотр двух частей одного и того же файла: откройте :split и используйте :set scrollbind или :set cursorbind, если нужно синхронное перемещение.
- Работа с большими файлами: уменьшите количество активных окон и отключите лишние плагины, если заметили торможение.
Пример: синхронная прокрутка двух окон одного файла
:split file.txt
:set scrollbindЭто полезно при сравнении разных разделов длинного файла.
Шпаргалка по клавишам (Cheat sheet)
| Действие | Команда |
|---|---|
| Горизонтальное разделение | :split |
| Вертикальное разделение | :vsplit |
| Открыть терминал | :terminal |
| Перейти к соседнему окну | Ctrl+W w |
| Перейти вниз | Ctrl+W j |
| Переместить окно наверх | Ctrl+W K |
| Увеличить высоту | Ctrl+W + |
| Уменьшить высоту | Ctrl+W - |
| Закрыть окно | :q |
| Закрыть всё и выйти | :qall |
Когда разделённые окна не подходят (примеры)
- Если требуется отдельный сеанс терминала с возможностью отделения/пфоновления — лучше использовать tmux или GNU Screen.
- При интенсивном графическом взаимодействии (GUI-инструменты) Vim в терминале может быть менее удобен, чем IDE.
- Для визуального сравнения изменений с богатой историей (например, с графическими дифф-редакторами) может оказаться полезнее специализированный инструмент.
Альтернативные подходы
- tmux или screen: дают терминальные мультиплексоры с возможностью отделять сессии и восстанавливать их позже.
- Neovim: совместим с большинством команд Vim, но имеет улучшенную встроенную поддержку терминалов, асинхронных плагинов и API для плагинов.
- Графические редакторы/IDE: если вам важны подсветка ошибок в реальном времени, автодополнение и визуальные плагины, возможно, стоит сочетать Vim с GUI-решением или плагинами.
Сравнение Vim vs tmux (кратко)
- Цель: Vim — текстовый редактор; tmux — мультиплексор терминалов.
- Отделение: tmux позволяет «отсоединять» сеанс и оставлять процессы в фоне; Vim не может этого делать сам по себе.
- Комбинация: часто используют Vim внутри tmux — это даёт лучшее из обоих миров.
Практическая методика для повседневного рабочего процесса
- Откройте проект в Vim или Neovim.
- Распределите окна: слева — основной редактируемый файл, справа — буфер справки/документации, снизу — терминал (:terminal).
- Назначьте в конфиге удобные маппинги для перемещения между окнами и изменения размеров.
- Сохраняйте часто (используйте :wall перед критическими сборками).
- Если требуется отделение сессии, перенесите работу в tmux.
Чек-листы по ролям
Разработчик:
- Открыл основной файл в левом окне.
- Открыл тесты/справку справа.
- Запустил терминал внизу для сборки и тестов.
- Назначил mape для быстрого переключения.
Системный администратор / SRE:
- Открыл конфиги в нескольких окнах для параллельного сравнения.
- Запустил интерактивный терминал в одном из окон.
- Использует tmux, если нужно отсоединять сессии.
Техпис/ревьюер:
- Открыл документ слева и список изменений справа.
- Использует :set number для нумерации строк и удобного комментарирования.
Короткий глоссарий (1‑строчка)
- Буфер: содержимое файла, загруженное в память Vim.
- Окно: визуальное представление буфера на экране (pane).
- Tabpage: набор окон; вкладки в Vim.
Частые ошибки и как их избегать
- Проблема: Ctrl-сочетания не работают — причина: терминал перехватывает их. Решение: переназначьте в терминале или используйте альтернативные маппинги.
- Проблема: много окон замедляют работу при больших файлах. Решение: уменьшите количество окон или используйте менее ресурсоёмкие плагины.
- Проблема: потеря состояния при перезапуске терминала. Решение: для длительных задач используйте tmux.
Примеры конфигурации (мини‑сниппеты)
Добавьте в ~/.vimrc или init.vim для удобства:
" Быстрые маппинги для перемещения между окнами
nnoremap h
nnoremap j
nnoremap k
nnoremap l
" Быстрое изменение размера окон
nnoremap :vertical resize -5
nnoremap :vertical resize +5
nnoremap :resize +2
nnoremap :resize -2 Эти настройки часто используются, чтобы сократить число нажатий клавиш.
Критерии приёмки
- Можно открыть два и более окна и редактировать их независимо.
- Навигация между окнами работает с помощью Ctrl+W и соответствующих клавиш.
- Разделённые окна корректно отображают терминал при использовании :terminal (если поддерживается версией Vim/Neovim).
Итог
Разделённые окна в Vim — мощный инструмент для параллельной работы с файлами, сравнений и интеграции терминала прямо в рабочую среду. В сочетании с tmux или Neovim они образуют гибкую и производительную среду разработки. Начните с базовых split/vsplit и постепенно добавляйте маппинги и автоматизацию в конфиг — это заметно ускорит вашу работу.
Важно: если вам нужны возможности отделения сессий или длительного фонового выполнения процессов, используйте tmux совместно с Vim.
Короткая аннотация для социальных сетей: лёгкий и практичный гид по работе с окнами в Vim, команды, советы, шпаргалка и маппинги для ускорения ежедневной работы.
Похожие материалы
Рутины Google Home: автоматизация дома
Загрузочная USB с Windows 10 на Mac — пошагово
Навсегда включить режим энергосбережения на iPhone
Как настроить Google Nest Mini — быстрый старт
Отключить Sticky Keys в Windows