Comment puis-je définir la largeur de la fenêtre de gvim à 80 colonnes de texte, plus celles nécessaires pour afficher le numéro de ligne

9

J'utilise gvim avec

set number

dans mon .vimrcdonc il montre le numéro de lin, plus un espace, avant chaque ligne.

Si le document a moins de 10 lignes, cela prend 2 colonnes, s'il a plus de 10, 3 colonnes et ainsi de suite.

Si je mets

set lines=40 columns=80

dans .gvimrc, il affichera 78 colonnes de code et 2 pour le nombre de lin plus le rythme, ou 77 + 3 et ainsi de suite.

Je voudrais que la largeur de la fenêtre soit définie sur 80 colonnes + le nombre de colonnes nécessaire pour afficher le numéro de lin.

Il n'a pas besoin d'être dynamique, mais j'aimerais pouvoir lire le nombre de lignes d'un fichier donné et le définir en columnsfonction. (Bien sûr, une solution dynamique serait vraiment bien, mais pas essentielle)

Elton Carvalho
la source

Réponses:

9

Essayez ceci dans votre ~ / .vimrc:

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

Chaque fois que vous chargez un tampon (c'est-à-dire, ouvrez un fichier), cela déterminera le nombre de colonnes nécessaires pour afficher le plus grand numéro de ligne, définissez l'option 'numberwidth' en conséquence et définissez 'colonnes' sur ce nombre plus 80 pour votre texte .

garyjohn
la source
Merci! Cela fonctionne très bien lors de l'ouverture d'un fichier. Avez-vous une idée de comment y arriver lorsque vous changez d'onglet également? Merci d'avance.
Elton Carvalho
1
Les événements de commande automatique de Vim sont répertoriés sur :help autocommand-events. Parmi eux TabEnter, vous pouvez essayer de remplacer BufReadpar BufRead,TabEnterdans l'exemple ci-dessus et voir si cela vous donne le comportement que vous souhaitez. Je n'ai pas testé l'exemple avec cet événement moi-même.
garyjohn
Merci @garyjohn, TabEnter a fonctionné comme prévu. Peut-être que plus tard, je jouerai avec ces événements de commande automatique. Ils sont vraiment utiles!
Elton Carvalho
1
@david_nash: 'numberwidth'ne grandit que de façon logarithmique avec le nombre de lignes dans le fichier, donc si vous pouvez vous permettre d'avoir l'espace horizontal 'number'activé, je ne pense pas que vous auriez à vous soucier de le limiter.
garyjohn
1
@JonathanHartley: Il serait assez facile de contrôler cela avec un opérateur ternaire ( :help expr1) ou avec un if / endif (par exemple, :help options-in-terminal). Le problème est en train de changer & colonnes quand 'number'est changé. J'ai pensé à utiliser l'événement de commande automatique OptionSet, mais :help OptionSetdit que c'est une mauvaise idée de réinitialiser une option lors du traitement de cet événement.
garyjohn
2

j'utilise

set lines=24 columns=84

dans mon $ HOME / .gvimrc qui me donne ce que vous voulez. J'ai rarement (voire jamais) des fichiers qui sont plus longs que les 999 lignes, donc cela fonctionne pour moi.

Sardathrion - contre les abus SE
la source
C'est ce que je faisais, mais garder exactement 80 colonnes de texte est bien parce que je peux éviter de finir avec 81 caractères sur une seule ligne, ce qui n'est pas grave, mais c'est bien à éviter.
Elton Carvalho
2

J'ai défini la largeur de numéro à, disons, 5, puis les colonnes à 85 (80 + 5). Cela devrait être bon pour les fichiers de 0 ligne à un million de lignes.

Voici ce que vous devrez peut-être mettre dans le fichier ~ / .vimrc (par défaut)

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

Vous verrez que le numéro de ligne est formaté avec '% 5d' (5 est la largeur du numéro ci-dessus) au lieu du format par défaut '% d', gaspillant un peu de bien immobilier avant les numéros de ligne, mais en conservant la cohérence.

isound
la source
Bienvenue dans Super User. Sachez que vous avez publié une réponse à une question très ancienne. Bien qu'il n'y ait rien de mal à le faire, sachez que vous risquez de ne pas obtenir de réponse.
CharlieRB