Vim'in gerçek yüksekliğini ve genişliğini nasıl alabilirim?


18

winheight()ve winwidth()geçerli penceredeki sütun / satır sayısını döndürür. Aradığım şey, düzenleme alanının gerçek yüksekliğine ve genişliğine veya bir terminalde çalıştırıldığında görüntülenen alana daha yakın bir şey. Sorun winheight()ve winwidth()bu değerlerden hesaplanan en-boy oranı, gerçek-boy oranı ile temas dışında olmasıdır.

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

Arabellek alanının ekran görüntüsü, görüntülenen en boy oranını veren 936x918 piksel boyutundadır 1.019608. Yazı tipi boyutunu kullanarak gerçek değeri alabilirim, ama nasıl?

Bu, Vim'i dikey bir bölmede nasıl açık yardım yapabilirim? . Nobe4'ün çözümünü uyarlamaya çalışıyorum .


3
Düz Vim işlevleriyle piksel cinsinden boyutlar alabileceğinizi sanmıyorum. Dikey bölünmüş açılış yardım gelince, ben sadece terminal penceresi yeterince geniş olup dikey eğer bölünmüş, en boy oranı hesaplamaları ile rahatsız etmeyin: cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>.
Sato Katsura

1
@SatoKatsura böylece mobil olup olmadığını belirlemek için belge genişliğini kullanan çoğu web geliştiricisi tarafından belirlenen geleneği takip ediyor. :(
muru

1
Gerçekten değil, çünkü bunu sadece kendime uyguluyorum. Bir süre en boy oranı ile oynadım ve sonuçların tatmin edici olmadığını gördüm. Sonra terminalleri açmak için "normal" boyut ve "geniş" terminaller için tam iki kısayol olduğunu hatırladım. Bu yüzden terminallerim neredeyse her zaman aynı boyutlara sahip. Tabii ki YMMV.
Sato Katsura

@SatoKatsura bu komut ciddi bir kara büyü. Temizlemeye yardımcı olan ==#operatörü bilmemenin yanı sıra, :haslında tüm ucube komutunu anladığım için çok şaşırdım . Bu beni bir Vim uzmanı yapıyor mu? Böyle bir şey olmalı. Daha fazla çıkmanız gerekiyor.
Steven Lu

Yanıtlar:


1

104 sütun / 51 satır = 2.04

Her hücrenin en boy oranı dikey olduğu için hesaplamanız eğri.

Örneğin, 23pt yazı tipi ve varsayılan karakter aralığı olan Terminal.app üzerinde, her terminal hücresinin toplam 728x765 piksel için 7 piksel genişliği ve 15 piksel yüksekliği vardır :

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


Harici komutları veya terminalle iletişim kurmayı gerektirmeden yazı tipi boyutunu Vim içinden alamazsınız, bu da oldukça ağır olabilir. Açıkçası, bu Gvim sayesinde farklı 'guifont'.

Bunu yapmayı başarırsanız, yine de standart yoksa terminal programına bağlı olarak değişebilen bir hücrenin boyutunu küçültmek için bir yola ihtiyacınız vardır . Sadece Neyse ki aynı sonucu veren iTerm 2'yi kontrol ettim.


Bu nedenle statik bir çözüm tercih ederim. Minimum genişlik denetimini, yerleştirebileceğiniz bu snippet'e aşıladım 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>)

Pencere geçerli tamponun 80 sütununu tutacak kadar büyükse, sağda dar bir yardım bölümü açılır, aksi takdirde bölüm açılır. Bölme yönünü ile özelleştirebilirsiniz :vertical.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.