Найти тему
Блокнот математика

Рубрика "Секреты Вим". Окна

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

Можно открыть в Вим несколько файлов в разных окнах, указав аргумент командной стркои -o или -O (в первом случае окна будут расположены одно над другим, во втором слева направо). Можно указать число окон (-o8, например): лишние файлы не будут видны, либо лишние окна останутся пустыми.

Окна могут быть снабжены строкой информации, в которой обычно указано имя файла. Опция laststatus может это отключить (0), включить строку только если окон больше одного (1) или включить строку всегда (2). В эту строку можно поместить массу информации, от характеристик файла до прогноза погоды.

Изнутри Вим окна в данной вкладке создаются "расщеплением" текущего окна. Для этого есть команда :split или ее синонимы нормального режима, а именно <C-W>s (S может быть и заглавной). Получится два окна, одно над другим (горизонтальное расщепление), в них один и тот же файл (но никто не мешает открыть какой-нибудь другой). Команда с двоеточием позволяет указать имя другого файла и опции (кодировка и т.п.), а повторитель перед командой имеет смысл высоты окна (по умолчанию половина расщепляемого). Команды нормального режима так не умеют, но зато есть еще <C-W>n, которая откроет новое пустое окно, и в нем уже можно открыть какой-то другой файл. Соответствующая команда :new тоже есть.

Если у вас два окна с одним и тем же файлом и вы в одном его закроете не сохранив, то в другом он останется, не пропадет.

Возможно и вертикальное расщепление, когда новое окно окажется слева от второго. Это :vsplit, или <C-W>v. Для создания пустого окна есть :vnew.

Может быть полезна команда :sview, которая открывает в окне файл только для чтения, и :sfind, которая ищет файл по указанным путям.

Опции splitbelow и splitright указывают, где поместить новое окно.

Закрыть окно можно обычной командой выхода, :q, и есть еще вариант <C-W>q. Первая команда может брать повторитель, и тогда закрывается окно по номеру. Варианты:

  • :1q — закрыть первое окно
  • :$q — закрыть последнее окно
  • :-q — закрыть предыдущее
  • :+q — закрыть следующее
  • :+1q — закрыть следующее за текущим.

Есть команда :close, которая закрывает окна, но не выходит из Вим (после закрытия последнего окна). Последнее окно этой командой не может быть закрыто.

Можно закрыть все окна, кроме текущего: :only или <C-W>o.

Переместить курсор в окно можно мышкой, если она у вас включена. Есть и команды:

<C-W>↓ или <C-W>j идут по окнам вниз, <C-W>↑ или <C-W>k идут вверх, аналогичны и команды для движения влево и вправо.

Команды <C-W>w и <C-W>W перебирают окна.

А <C-W>p переходит в недавно использованное окно.

Окна можно и перемещать: <C-W>r или <C-W><C-R> переставляет окна по кругу, а <C-W>R крутит в другую сторону. Так можно поменять местами верхнее с нижним или левое с правым. А <C-W>x меняет окно со следующим за ним местами.

Важно бывает изменить раскладку окон на экране. Так, <C-W>K и <C-W>J перемещают текущее окно наверх или вниз и растягивают его на всю ширину.

Аналогично, <C-W>H и <C-W>J перемещают текущее окно на левый или правый край и растягивают его на всю высоту.

Для двух окон эти команды, по сути, меняют раскладку с вертикальной на горизонтальную или обратно.

Можно отделить окно и перенести в отдельную вкладку: <C-W>T

Изменять размер окна можно мышкой, и это довольно интуитивно. Несколько полезных команд: <C-W>= выравнивает ширину и высоту всех окон, делая их примерно одинаковыми.

Команды <C-W>- и <C-W>+ изменяют высоту окна на 1 (или на указанное как повторитель число). А <C_W>_ либо выставляет высоту в указанное значение, либо делает ее максимально возможной. Команды <C-W> >, <C-W> < и <C-W> | аналогично изменяют ширину.

Если выставить флаг equalalways, то окна будут поддерживаться одного размера при расщеплении или закрытии.

Есть две опции: winheight и winwidth, задающие минимальные размеры текущего окна, то есть того окна, которое вы делаете активным. Если это нуль, возможность отключена. Если очень большое число, то выбранное окно занимает всю доступную высоту и/или ширину экрана, оставив чуть-чуть, чтобы другие окна были видны и могли быть выбраны. Можно задать какое-то значение, и тогда если окно в пассивном состоянии меньше, при активации оно будет увеличиваться. Так можно более экономно использовать доступную площадь экрана.

Удачи, коллеги!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022