Wie erhalte ich die tatsächliche Höhe und Breite von Vim?


18

winheight()und winwidth()geben Sie die Anzahl der Spalten / Zeilen im aktuellen Fenster zurück. Was ich suche, ist etwas näher an der tatsächlichen Höhe und Breite des Bearbeitungsbereichs oder des angezeigten Bereichs, wenn er in einem Terminal ausgeführt wird. Das Problem mit winheight()und winwidth()ist, dass das aus diesen Werten berechnete Seitenverhältnis nicht mit dem tatsächlichen Seitenverhältnis übereinstimmt.

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

Ein Screenshot des Pufferbereichs hat eine Größe von 936 x 918 Pixel und ein angezeigtes Seitenverhältnis von 1.019608. Ich denke, ich kann den tatsächlichen Wert anhand der Schriftgröße ermitteln, aber wie?

Dies ist eine Fortsetzung von Wie kann ich Vim open dazu bringen, in einem vertikalen Split zu helfen? . Ich versuche, die Lösung von Nobe4 anzupassen .


3
Ich glaube nicht, dass man mit einfachen Vim-Funktionen Dimensionen in Pixeln erhalten kann. Wie zum Öffnen Hilfe in einer vertikalen Spaltung, nicht die Mühe ich nicht mit einem Seitenverhältnis Berechnungen, ich teile nur vertikal , wenn die Terminal - Fenster breit genug ist: cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>.
Sato Katsura

1
@SatoKatsura folgt damit der Tradition der meisten Webentwickler, die anhand der Dokumentbreite feststellen, ob es sich um ein Mobiltelefon handelt. :(
muru

1
Nicht wirklich, da ich das nur mir selbst zufüge. Ich habe eine Weile mit dem Seitenverhältnis gespielt und fand die Ergebnisse unbefriedigend. Dann erinnerte ich mich, dass ich genau zwei Verknüpfungen zum Öffnen von Terminals für "normale" Größe und für "breite" Terminals habe. So haben meine Terminals fast immer die gleichen Größen. YMMV natürlich.
Sato Katsura

@SatoKatsura dieser Befehl ist etwas ernsthafte dunkle Magie. Ich bin sehr überrascht, dass ich, abgesehen davon, dass ich nichts über den ==#Operator wusste, der zur Aufklärung :hbeigetragen hat, den gesamten Freaking-Befehl verstanden habe. Macht mich das zu einem Vim-Experten? Muss so etwas sein. Müssen mehr raus.
Steven Lu

Antworten:


1

104 Spalten / 51 Zeilen = 2,04

Ihre Berechnung ist verzerrt, da das Seitenverhältnis jeder Zelle vertikal ist.

Beispiel: In Terminal.app hat jede Terminalzelle mit einer Schriftgröße von 23 pt und einem Standardzeichenabstand eine Breite von 7 Pixel und eine Höhe von 15 Pixel für insgesamt 728 x 765 Pixel :

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


Sie können die Schriftgröße nicht in Vim abrufen, ohne externe Befehle aufzurufen oder mit dem Terminal zu kommunizieren, was sehr schwer werden kann. Offensichtlich ist dies in Gvim anders, dank 'guifont'.

Wenn Sie es schaffen, müssen Sie dennoch die Größe einer Zelle abziehen, die je nach Terminalprogramm variieren kann, wenn es keinen Standard gibt . Ich habe nur iTerm 2 überprüft, die zum Glück das gleiche Ergebnis haben.


Daher würde ich mich für eine statische Lösung entscheiden. Ich habe den Mindestbreite-Check auf dieses Snippet gepfropft, in das Sie Folgendes einfügen können 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>)

Wenn das Fenster groß genug ist, um 80 Spalten des aktuellen Puffers aufzunehmen, wird rechts ein schmaler Hilfesplit geöffnet, andernfalls wird der Split unten geöffnet. Sie können die Aufteilungsrichtung mit anpassen :vertical.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.