winheight()
и winwidth()
вернуть количество столбцов / строк в текущем окне. То, что я ищу, - это что-то ближе к реальной высоте и ширине области редактирования или отображаемой области, если выполняется в терминале. Проблема с winheight()
и в winwidth()
том , что соотношение сторон рассчитаны из этих значений вне связи с фактическим соотношением сторон.
:echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%')
104 51 2.039216
Снимок экрана области буфера имеет размер 936x918 пикселей, что дает отображаемое соотношение сторон 1.019608
. Я думаю, что я могу получить фактическое значение, используя размер шрифта, но как?
Это продолжение того, как я могу сделать Vim открытой справкой в вертикальном разделении? , Я пытаюсь адаптировать решение Nobe4 .
cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>
.==#
операторе, который:h
помог мне разобраться, я на самом деле понимал всю эту команду. Это делает меня экспертом по Vim? Должно быть что-то в этом роде. Нужно больше убираться.Ответы:
Ваш расчет искажен, потому что соотношение сторон каждой ячейки вертикальное.
Например, в Terminal.app с шрифтом 23pt и межсимвольным интервалом по умолчанию каждая ячейка терминала имеет ширину 7px и высоту 15px, что в общей сложности составляет 728x765px :
Вы не можете получить размер шрифта из Vim, не вызывая внешние команды или способ связи с терминалом, который может стать довольно тяжелым. Очевидно, что это отличается от Gvim благодаря
'guifont'
.Если вам удастся сделать это, вам все равно нужен способ вычесть размер ячейки, который может варьироваться в зависимости от программы терминала, если нет стандарта . Я только проверил iTerm 2, который, к счастью, имеет тот же результат.
Поэтому я бы выбрал статическое решение. Я привел проверку минимальной ширины к этому фрагменту, который вы можете поместить в
plugin/help.vim
:Если окно достаточно велико, чтобы сохранить 80 столбцов текущего буфера, справа открывается узкое разделение справки, в противном случае разделение открывается ниже. Вы можете настроить направление разделения с помощью
:vertical
.источник