Як отримати фактичну висоту та ширину Vim?


18

winheight()і winwidth()повернути кількість стовпців / рядків у поточному вікні. Що я шукаю, це щось ближче до фактичної висоти та ширини області редагування або відображеної області, якщо працювати в терміналі. Проблема з winheight()і в winwidth()тому , що співвідношення сторін розраховані з цих значень поза зв'язком з фактичним співвідношенням сторін.

:echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%')
104 51 2.039216

Скріншот області буфера розміром 936x918 пікселів, що дає відображене співвідношення сторін 1.019608. Я думаю, що я можу отримати фактичне значення, використовуючи розмір шрифту, але як?

Це подальший досвід щодо того, як я можу зробити відкриту допомогу Vim у вертикальному розрізі? . Я намагаюся адаптувати рішення Nobe4 .


3
Я не думаю, що ви можете отримати розміри в пікселях із простими функціями Vim. Що ж стосується відкриття допомоги в вертикальному розкол, я не турбувати з співвідношенням сторін обчислень, я просто розділити вертикально , якщо вікно терміналу досить широко: cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>.
Сато Кацура

1
@SatoKatsura, таким чином, слідуючи традиції, встановленій більшості веб-розробників, які використовують ширину документа, щоб визначити, чи це мобільний телефон. :(
муру

1
Не дуже, оскільки я лише наношу це собі. Я деякий час грав із співвідношенням сторін і виявив результати незадовільними. Тоді я згадав, що у мене рівно два ярлики для відкривання клем, для "нормального" розміру та для "широких" терміналів. Тож мої термінали майже завжди мають однакові розміри. YMMV звичайно.
Сато Кацура

@SatoKatsura ця команда - це якась серйозна темна магія. Я дуже здивований, що окрім того, що не знаю про ==#оператора, який :hдопоміг прояснити, я насправді зрозумів усю чумацьку команду. Це робить мене експертом Vim? Має бути щось подібне. Потрібно вийти більше.
Стівен Лу

Відповіді:


1

104 стовпчики / 51 рядок = 2,04

Ваш розрахунок перекошений, оскільки співвідношення сторін кожної комірки є вертикальним.

Наприклад, у Terminal.app, з шрифтом 23pt та інтервалом символів за замовчуванням, кожна клемна комірка має ширину 7 пікселів та висоту 15 пікселів загалом 728x765px :

(104 * 7) / (51 * 15) = 728/765 = 0,95


Ви не можете отримати розмір шрифту в Vim, не посилаючись на зовнішні команди чи спосіб спілкування з терміналом, який може стати досить важким. Очевидно, це у Gvim відрізняється завдяки 'guifont'.

Якщо вам це вдається, все ж вам потрібен спосіб вирахувати розмір комірки, який може змінюватися в залежності від програми терміналу, якщо немає стандарту . Я перевірив лише iTerm 2, який, на щастя, має однаковий результат.


Тому я б обрав статичне рішення. Я прищепив перевірку мінімальної ширини до цього фрагмента, який ви можете розмістити в plugin/help.vim:

function! Help(...)
  let l:topic = a:0 ? a:1 : ''
  if winwidth('%') >= 160 " Minimum width
    execute 'vertical botright help' l:topic
    execute 'vertical resize 78'
  else
    execute 'botright help' l:topic
  endif
endfunction

" Use :H to open a vertical or horizontal help split
command! -complete=help -nargs=? H call Help(<f-args>)

Якщо вікно достатньо велике, щоб зберігати 80 стовпців поточного буфера, справа відкриється вузький довідковий розділ, інакше розділення відкриється внизу. Ви можете налаштувати напрямок розділення за допомогою :vertical.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.