Привет, коллеги. Обсудим окна поподробнее. Сам я раньше этой темой пренебрегал, поскольку есть вкладки. Но иногда бывает удобно видеть сразу два файла, или даже больше. Например, мне стало удобно открыть много маленьких окошек для файлов с параметрами модели: их все видно сразу, и можно легко настроить запуск. Так что пришлось освоить работу с окнами.
Можно открыть в Вим несколько файлов в разных окнах, указав аргумент командной стркои -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, задающие минимальные размеры текущего окна, то есть того окна, которое вы делаете активным. Если это нуль, возможность отключена. Если очень большое число, то выбранное окно занимает всю доступную высоту и/или ширину экрана, оставив чуть-чуть, чтобы другие окна были видны и могли быть выбраны. Можно задать какое-то значение, и тогда если окно в пассивном состоянии меньше, при активации оно будет увеличиваться. Так можно более экономно использовать доступную площадь экрана.
Удачи, коллеги!