¿Cómo puedo establecer el ancho de la ventana de gvim en 80 columnas de texto, más las necesarias para mostrar el número de línea?

9

Yo uso gvim con

set number

en mi .vimrcmuestra el número de lino, más un espacio, antes de cada línea.

Si el documento tiene menos de 10 líneas, esto toma 2 columnas, si tiene más de 10, 3 columnas y así sucesivamente.

Si pongo

set lines=40 columns=80

adentro .gvimrc, mostrará 78 columnas de código y 2 para el número de lino más el ritmo, o 77 + 3 y así sucesivamente.

Me gustaría que el ancho de la ventana se establezca en 80 columnas + cualquier número de columnas necesarias para mostrar el número de lino.

No necesita ser dinámico, pero me gustaría poder leer el número de líneas de un archivo determinado y configurarlo de columnsacuerdo. (Por supuesto, una solución dinámica sería realmente buena, pero no esencial)

Elton Carvalho
fuente

Respuestas:

9

Pruebe esto en su ~ / .vimrc:

au BufRead * let &numberwidth = float2nr(log10(line("$"))) + 2
          \| let &columns = &numberwidth + 80

Cada vez que cargue un búfer (es decir, abra un archivo), eso determinará el número de columnas necesarias para mostrar el número de línea más grande, establecerá la opción 'numberwidth' en consecuencia y establecerá 'columnas' en ese número más 80 para su texto .

garyjohn
fuente
¡Gracias! Funciona muy bien al abrir un archivo. ¿Alguna idea de cómo hacer que esto suceda al cambiar de pestaña también? Gracias por adelantado.
Elton Carvalho
1
Los eventos de autocomando de Vim se enumeran en :help autocommand-events. Entre ellos se encuentra TabEnter, por lo que podría intentar sustituir BufReadpor BufRead,TabEnteren el ejemplo anterior y ver si eso te da el comportamiento que desea. Yo mismo no he probado el ejemplo con ese evento.
garyjohn
Gracias @garyjohn, TabEnter funcionó como se esperaba. Tal vez más tarde jugaré con esos eventos de autocomando. ¡Son igualmente útiles!
Elton Carvalho
1
@david_nash: 'numberwidth'crece solo logarítmicamente con el número de líneas en el archivo, por lo que si puede permitirse el espacio horizontal para 'number'habilitarlo, no creo que deba preocuparse por limitarlo.
garyjohn
1
@ JonathanHartley: Sería bastante fácil controlar esto con un operador ternario ( :help expr1) o con un if / endif (por ejemplo, :help options-in-terminal). El problema está cambiando y columnas cuando 'number'se cambia. Pensé en usar el evento de autocomando OptionSet, pero :help OptionSetdice que es una mala idea restablecer una opción mientras se procesa este evento.
garyjohn
2

yo suelo

set lines=24 columns=84

en mi $ HOME / .gvimrc que me da lo que quieres. Raramente (si alguna vez) tengo archivos que son más largos que las 999 líneas, así que funciona para mí.

Sardathrion - contra el abuso SE
fuente
Eso es lo que estaba haciendo, pero mantener exactamente 80 columnas de texto es bueno porque puedo evitar terminar con 81 caracteres en una línea, lo cual no es gran cosa, pero es bueno evitarlo.
Elton Carvalho
2

Establecí el ancho de número en, digamos, 5 y luego configuré las columnas en 85 (80 + 5) Eso debería ser bueno para archivos de 0 líneas a un millón de líneas.

Esto es lo que puede tener que poner en el archivo ~ / .vimrc (predeterminado)

set numberwidth=5  "Good for files upto a million lines
set columns=85
set nu

Verá que el número de línea está formateado con '% 5d' (5 es el ancho de número anterior) en lugar del formato predeterminado '% d', desperdiciando un poco de espacio antes de los números de línea, pero manteniendo la coherencia.

yo sueno
fuente
Bienvenido a Super User. Tenga en cuenta que ha publicado una respuesta a una pregunta que es muy antigua. Aunque no tiene nada de malo hacerlo, solo tenga en cuenta que es posible que no obtenga una respuesta.
CharlieRB