Я не знаю функцию, которая будет это делать, но вот некоторые факты:
- Размер окна можно получить с помощью
winwidth(wnr)
и winheight(wnr)
. - Numberокон можно получить с помощью
winnr('$')
. - Если
0<wnr≤winnr('$')
, то существует окно с номером wnr
. - Общая ширина
&columns
и общая высота &lines
. - Окна разделены разделителем на одну колонку или одну строку.
Чтобы получить расположение окон, вам не хватает только одного факта: как они пронумерованы.Сейчас я не могу найти это в справке.
:h CTRL-W_w
говорит о том, что окна пронумерованы от левого верхнего до нижнего правого.Однако недостаточно определить, как будут пронумерованы окна после выполнения следующих команд:
only
enew
vnew
new
wincmd h
new
" Result:
" +---+---+
" | 1 | 3 |
" +---+---+
" | 2 | 4 |
" +---+---+
only
enew
new
vnew
wincmd j
vnew
" Result:
" +---+---+
" | 1 | 2 |
" +---+---+
" | 3 | 4 |
" +---+---+
Таким образом, похоже, что определение текущей компоновки окна невозможно без использования команд перемещения окна (wincmd h/j/k/l
).
Некоторое время назад был представлен еще один дополнительный вариант: pyeval(printf('(lambda win: [win.col, win.row])(vim.windows[%s - 1])', winnr))
(также py3eval(…)
) обеспечит точное положение верхнего левого угла окна winnr
.Требуется Vim, скомпилированный с +python[/dyn]
или +python3[/dyn]
и сам Python.