Jak mogę ustawić szerokość okna gvima na 80 kolumn tekstu plus te potrzebne do wyświetlenia numeru linii

9

Używam gvim z

set number

u mnie .vimrcpokazuje numer pościeli plus spację przed każdą linią.

Jeśli dokument ma mniej niż 10 wierszy, zajmuje to 2 kolumny, Jeśli ma więcej niż 10, 3 kolumny i tak dalej.

Jeśli tak

set lines=40 columns=80

w .gvimrc, to pokaże 78 kolumny kodu i 2 dla LineNumber powiększonej tempie, lub 77 + 3 i tak dalej.

Chciałbym, aby szerokość okna była ustawiona na 80 kolumn + dowolna liczba kolumn potrzebna do wyświetlenia numeru bielizny.

Nie musi być dynamiczny, ale chciałbym móc odczytać liczbę wierszy danego pliku i columnsodpowiednio ustawić . (Oczywiście dynamiczne rozwiązanie byłoby naprawdę fajne, ale nie konieczne)

Elton Carvalho
źródło

Odpowiedzi:

9

Wypróbuj to w swoim ~ / .vimrc:

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

Za każdym razem, gdy załadujesz bufor (tj. Otworzysz plik), który określi liczbę kolumn wymaganych do wyświetlenia największego numeru wiersza, odpowiednio ustaw opcję „liczba szerokości” i ustaw „kolumny” na tę liczbę plus 80 dla tekstu .

garyjohn
źródło
Dzięki! Działa świetnie podczas otwierania pliku. Masz jakiś pomysł, jak to zrobić, również przy przełączaniu kart? Z góry dziękuję.
Elton Carvalho,
1
Zdarzenia autocommand Vima są wymienione na stronie :help autocommand-events. Wśród nich jest TabEnter, więc możesz spróbować zastąpić BufReadprzez BufRead,TabEnterw powyższym przykładzie i sprawdzić, czy daje to pożądane zachowanie. Sam nie testowałem przykładu z tym wydarzeniem.
garyjohn
Dziękuję @garyjohn, TabEnter działał zgodnie z oczekiwaniami. Może później zagram z tymi wydarzeniami z autopolecenia. Są bardzo przydatne!
Elton Carvalho,
1
@david_nash: 'numberwidth'rośnie tylko logarytmicznie z liczbą linii w pliku, więc jeśli możesz sobie pozwolić na włączenie przestrzeni poziomej 'number', nie sądzę, że będziesz musiał się martwić o jej ograniczenie.
garyjohn
1
@JathanathanHartley: Łatwo byłoby to kontrolować za pomocą operatora trójskładnikowego ( :help expr1) lub if / endif (np :help options-in-terminal.). Problem zmienia się i kolumny po 'number'zmianie. Myślałem o użyciu zdarzenia autocommandu OptionSet, ale :help OptionSetpowiedziałem, że resetowanie opcji podczas przetwarzania tego zdarzenia jest złym pomysłem.
garyjohn
2

używam

set lines=24 columns=84

w moim $ HOME / .gvimrc, który daje mi to, czego chcesz. Rzadko (jeśli w ogóle) mam pliki dłuższe niż 999 linii, więc działa dla mnie.

Sardathrion - przeciw nadużyciom SE
źródło
To właśnie robiłem, ale trzymanie dokładnie 80 kolumn tekstu jest fajne, ponieważ mogę zapobiec skończeniu 81 znaków w jednym wierszu, co nie jest niczym wielkim, ale miło go unikać.
Elton Carvalho,
2

Ustawiłem szerokość na, powiedzmy, 5, a następnie ustawiłem kolumny na 85 (80 + 5). To powinno być dobre dla plików od 0 linii do miliona linii.

Oto, co może być konieczne do umieszczenia (domyślnie) pliku ~ / .vimrc

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

Zobaczysz, że numer linii jest sformatowany za pomocą „% 5d” (5 to szerokość powyżej), zamiast domyślnego formatu „% d”, marnując trochę nieruchomości przed numerami linii, ale zachowując spójność.

brzmie
źródło
Witamy w Super User. Pamiętaj, że wysłałeś odpowiedź na bardzo stare pytanie. Chociaż nie ma w tym nic złego, pamiętaj, że możesz nie otrzymać odpowiedzi.
CharlieRB,