winheight()
et winwidth()
retourner le nombre de colonnes / lignes dans la fenêtre courante. Ce que je recherche, c'est quelque chose de plus proche de la hauteur et de la largeur réelles de la zone d'édition, ou de la zone affichée si elle est exécutée dans un terminal. Le problème avec winheight()
et winwidth()
est que le rapport d'aspect calculé à partir de ces valeurs est déconnecté du rapport d'aspect réel.
:echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%')
104 51 2.039216
Une capture d'écran de la zone tampon a une taille de 936x918 pixels, ce qui donne un rapport hauteur / largeur affiché de 1.019608
. Je pense que je peux obtenir la valeur réelle en utilisant la taille de la police, mais comment?
Ceci est un suivi de Comment puis-je faire pour ouvrir l'aide Vim dans une division verticale? . J'essaie d'adapter la solution de Nobe4 .
cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>
.==#
opérateur qui a:h
aidé à éclaircir, j'ai en fait compris toute la commande. Cela fait-il de moi un expert Vim? Ça doit être quelque chose comme ça. Besoin de sortir plus.Réponses:
Votre calcul est biaisé car le rapport hauteur / largeur de chaque cellule est vertical.
Par exemple, sur Terminal.app, avec une police de 23 pt et un espacement des caractères par défaut, chaque cellule du terminal a une largeur de 7 pixels et une hauteur de 15 pixels pour un total de 728 x 765 pixels :
Vous ne pouvez pas récupérer la taille de police à partir de Vim sans invoquer des commandes externes ou un moyen de communiquer avec le terminal, ce qui peut devenir assez lourd. Évidemment, c'est différent dans Gvim grâce à
'guifont'
.Si vous parvenez à le faire, vous avez toujours besoin d'un moyen de déduire la taille d'une cellule qui peut varier en fonction du programme du terminal s'il n'y a pas de norme . J'ai seulement vérifié iTerm 2 qui a heureusement le même résultat.
J'opterais donc pour une solution statique. J'ai greffé la vérification de la largeur minimale sur cet extrait dans lequel vous pouvez placer
plugin/help.vim
:Si la fenêtre est suffisamment grande pour conserver 80 colonnes du tampon actuel, un fractionnement d'aide étroit est ouvert sur la droite, sinon le fractionnement est ouvert ci-dessous. Vous pouvez personnaliser la direction de division avec
:vertical
.la source