Получить положение разделенных окон в редакторе vim - PullRequest
9 голосов
/ 10 ноября 2011

Я пытался выяснить, как получить положение / координаты окна разделения в окне редактора vim, но пока не повезло.

Скажем, например, у меня есть этот макет

     (0,0)         (2, 0)           
       \____________/____________
       |            |          |
       |  Split A   |  Split C |
 (0,2)-+------------+----------+
       |  Split B   |  Split D |
       |____________|__________|  #Split D would be (2, 2)

Я хочу получить координаты различных разделений моего окна Vim, это возможно?


Я сделал свою домашнюю работу и прогуглил это, также прошел через vim:help / :helpgrep

Вещи, которые я пробовал, не будут работать:

  • getwinposx() / getwinposy(): они не работаютна терминале, и они на самом деле не возвращают информацию, которую я хочу, он просто возвращает позицию окна ОС хоста.

  • :winpos: та же причина, что и в предыдущем пункте.

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Я не знаю функцию, которая будет это делать, но вот некоторые факты:

  1. Размер окна можно получить с помощью winwidth(wnr) и winheight(wnr).
  2. Numberокон можно получить с помощью winnr('$').
  3. Если 0<wnr≤winnr('$'), то существует окно с номером wnr.
  4. Общая ширина &columns и общая высота &lines.
  5. Окна разделены разделителем на одну колонку или одну строку.

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

: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.

0 голосов
/ 10 ноября 2011

Поэтому я думаю, что единственное, что может вам помочь, это:

:!xwininfo -id $WINDOWID

Кроме того, я не думаю, что вы можете получить конкретные разделения координат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...