winheight()
y winwidth()
devuelve el número de columnas / líneas en la ventana actual. Lo que estoy buscando es algo más cercano a la altura y el ancho reales del área de edición, o al área mostrada si se ejecuta en una terminal. El problema con winheight()
y winwidth()
es que la relación de aspecto calculada a partir de estos valores está fuera de contacto con la relación de aspecto real.
:echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%')
104 51 2.039216
Una captura de pantalla del área del búfer tiene un tamaño de 936x918 píxeles, con una relación de aspecto visualizada de 1.019608
. Creo que puedo obtener el valor real usando el tamaño de la fuente, pero ¿cómo?
Este es un seguimiento de ¿Cómo puedo hacer que Vim abra la ayuda en una división vertical? . Estoy tratando de adaptar la solución de Nobe4 .
cnoreabbrev h <C-r>=(&columns >= 160 && getcmdtype() ==# ':' && getcmdpos() == 1 ? 'vertical botright help' : 'h')<CR>
.==#
operador que:h
ayudó a aclarar, realmente entendí todo el maldito comando. ¿Eso me convierte en un experto de Vim? Tiene que ser algo así. Necesito salir más.Respuestas:
Su cálculo está sesgado porque la relación de aspecto de cada celda es vertical.
Por ejemplo, en Terminal.app, con fuente de 23 puntos y espaciado de caracteres predeterminado, cada celda de terminal tiene un ancho de 7 píxeles y una altura de 15 píxeles para un total de 728 x 765 píxeles :
No puede recuperar el tamaño de fuente desde Vim sin invocar comandos externos o una forma de comunicarse con el terminal, lo que puede llegar a ser bastante pesado. Obviamente, esto es diferente en Gvim gracias a
'guifont'
.Si logra hacerlo, aún necesita una forma de deducir el tamaño de una celda que puede variar según el programa del terminal si no hay un estándar . Solo revisé iTerm 2, que afortunadamente tiene el mismo resultado.
Por lo tanto, optaría por una solución estática. Injerté la verificación de ancho mínimo en este fragmento que podría colocar en
plugin/help.vim
:Si la ventana es lo suficientemente grande como para mantener 80 columnas del búfer actual, se abre una división de ayuda estrecha a la derecha, de lo contrario, la división se abre a continuación. Puede personalizar la dirección dividida con
:vertical
.fuente