Wie kann ich die Fensterbreite von gvim auf 80 Textspalten sowie die zur Anzeige der Zeilennummer erforderlichen festlegen?


9

Ich benutze gvim mit

set number

in meinem .vimrcso zeigt es die Leinenzahl plus ein Leerzeichen vor jeder Zeile.

Wenn das Dokument weniger als 10 Zeilen enthält, werden 2 Spalten benötigt. Wenn es mehr als 10, 3 Spalten usw. enthält.

Wenn ich setze

set lines=40 columns=80

In .gvimrcwerden 78 Codespalten und 2 für die Leinenzahl plus Tempo oder 77 + 3 usw. angezeigt.

Ich möchte, dass die Fensterbreite auf 80 Spalten + die Anzahl der Spalten eingestellt wird, die zum Anzeigen der Leinenzahl erforderlich sind.

Es muss nicht dynamisch sein, aber ich möchte die Anzahl der Zeilen einer bestimmten Datei lesen und entsprechend einstellen können columns. (Natürlich wäre eine dynamische Lösung wirklich ordentlich, aber nicht unbedingt erforderlich.)

Antworten:


9

Versuchen Sie dies in Ihrem ~ / .vimrc:

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

Jedes Mal, wenn Sie einen Puffer laden (dh eine Datei öffnen), der die Anzahl der Spalten bestimmt, die erforderlich sind, um die größte Zeilennummer anzuzeigen, stellen Sie die Option "Anzahlbreite" entsprechend ein und setzen Sie "Spalten" auf diese Zahl plus 80 für Ihren Text .


Vielen Dank! Es funktioniert hervorragend beim Öffnen einer Datei. Haben Sie eine Idee, wie dies auch beim Wechseln der Registerkarten geschehen kann? Danke im Voraus.
Elton Carvalho

1
Die Autocommand-Ereignisse von Vim sind unter aufgeführt :help autocommand-events. Unter anderem TabEnterkönnen Sie versuchen, im obigen Beispiel BufReaddurch zu ersetzen, BufRead,TabEnterund prüfen, ob Sie dadurch das gewünschte Verhalten erhalten. Ich habe das Beispiel mit diesem Ereignis nicht selbst getestet.
Garyjohn

Vielen Dank an @garyjohn, TabEnter hat wie erwartet funktioniert. Vielleicht spiele ich später mit diesen Autocommand-Events. Sie sind wirklich nützlich!
Elton Carvalho

1
@david_nash: 'numberwidth'wächst nur logarithmisch mit der Anzahl der Zeilen in der Datei. Wenn Sie sich also den horizontalen Platz leisten können, der überhaupt 'number'aktiviert werden soll, müssten Sie sich keine Gedanken darüber machen, ihn einzuschränken.
Garyjohn

1
@ JonathanHartley: Es wäre einfach genug, dies mit einem ternären Operator ( :help expr1) oder mit einem if / endif (z :help options-in-terminal. B. ) zu steuern . Das Problem ändert sich & Spalten, wenn 'number'geändert wird. Ich habe überlegt, das OptionSet-Autocommand-Ereignis zu verwenden, aber :help OptionSetes ist eine schlechte Idee, eine Option während der Verarbeitung dieses Ereignisses zurückzusetzen.
Garyjohn

2

ich benutze

set lines=24 columns=84

in meinem $ HOME / .gvimrc, das mir gibt, was Sie wollen. Ich habe selten (wenn überhaupt) Dateien, die länger als 999 Zeilen sind, also funktioniert es für mich.


Das habe ich getan, aber genau 80 Textspalten beizubehalten ist schön, weil ich verhindern kann, dass 81 Zeichen in einer Zeile stehen, was keine große Sache ist, aber schön zu vermeiden ist.
Elton Carvalho

2

Ich setze die Zahlenbreite beispielsweise auf 5 und dann die Spalten auf 85 (80 + 5). Das sollte für Dateien von 0 bis 1 Million Zeilen gut sein.

Folgendes müssen Sie möglicherweise in die (Standard-) Datei ~ / .vimrc einfügen

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

Sie werden sehen, dass die Zeilennummer mit '% 5d' (5 ist die oben angegebene Zahlenbreite) anstelle des Standardformats '% d' formatiert ist, wodurch ein wenig Platz vor den Zeilennummern verschwendet wird, aber die Konsistenz erhalten bleibt.


Willkommen bei Super User. Bitte beachten Sie, dass Sie eine Antwort auf eine sehr alte Frage gepostet haben. Obwohl daran nichts auszusetzen ist, sollten Sie sich bewusst sein, dass Sie möglicherweise keine Antwort erhalten.
CharlieRB
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.