Dlaczego Vim ustawia maksymalną szerokość tekstu na 79 zamiast 80?


13

Jestem trochę zdziwiony pewnymi wartościami domyślnymi w Vimie. W szczególności gq{motion}mówi się, że

[...]
If the 'textwidth' option is 0, the formatted line
length is the screen width (with a maximum width of
79).

Pomyślałem, że powinien mieć większy sens, gdyby 80zamiast tego ustawił maksymalną szerokość na .

Czy ktoś może mnie o tym oświecić? Chyba coś mi umknęło.


1
Cóż, 80jest dość arbitralnym „standardem” na początek, więc… dlaczego nie 79? Teraz zawijanie linii 79w 80terminalu o szerokości kolumn daje nieco więcej miejsca po prawej stronie i może poprawić czytelność. github.com/vim/vim/blob/…
romainl

2
Może w 80terminalu obejmującym całą kolumnę ostatnia kolumna była zarezerwowana na symbol zawijania? Jeśli jednak masz włączone numery linii, na pewno zajmą więcej niż tylko jedną kolumnę. Więc nadal jestem zaskoczony. Co więcej, z kodu, który podłączyłeś, 79czy można użyć maksymalnej wartości? Może nie zrozumiałem, co czytam.
Atcold

3
... lub możesz po prostu ustawić textwidthi gotowe.
VanLaser,

13
80 to liczba kolumn starych terminali sprzętowych, a później ekranów MS DOS (tryb tekstowy). tw=79zamiast tw=80wyświetlać wiersz o długości 80 znaków na 80 kolumnach terminal wypisuje dodatkową nową linię.
Sato Katsura,

7
Zawsze dodawana jest nowa linia. Jeśli zdarzy się, że jest to 81 znak na terminalu o szerokości 80 znaków, po prostu dostajesz pełną linię, a następnie pustą.
Sato Katsura,

Odpowiedzi:


7

Nie mam żadnych dowodów, że właśnie dlatego pierwotnie wybrano 79, ale dobrym powodem, aby pozostawić tę wartość na tej wartości, jest to, że jeśli użyjesz 'list'z wartością zawartą eolw, 'listchars'wówczas wyświetlanie listy list spowoduje 80 znaków długość linii do zawinięcia w następną linię w terminalu o szerokości 80 znaków.

Jeśli linia ma tylko 79 znaków, wówczas 80. kolumna jest wolna dla końca linii listchar.


Nie rozumiem Gdzie mam użyć 'list'? Co to ma zrobić?
Atcold,

@Atcold Jest to opcja, która powoduje, że znaki, które zwykle są niewidoczne (takie jak koniec linii), są wyświetlane na ekranie. Zobacz :help 'list'lub po prostu spróbuj uruchomić, :set listaby zobaczyć, jak działa.
Bogaty

:set listnie robi wiele. Założę się, że nie masz eolw listchars. Nie jestem pewien, czy to jest powód 79postaci. Wierzę, że @ sato-katsura ma najlepszą odpowiedź w komentarzu.
Atcold,

eoljest 'listchars'domyślnie włączony, ale oczywiście jest możliwe, że coś w twojej konfiguracji go usunęło. W swojej odpowiedzi wyraźnie stwierdzam, że nie mam powodu, aby sądzić, że był to historyczny powód, dla którego 79 zostało pierwotnie wybrane. Podaję tylko kolejny powód, dla którego warto nadal korzystać z tej funkcji.
Bogaty

@Atcold. Nowa linia nie jest domyślnie wyświetlana, nie ma sensu rezerwować na nią dodatkowego znaku.
Christian Brabandt,

6

Ważne jest, aby zdać sobie sprawę, że to „default” odnosi się tylko do gqi gwpoleceń oraz auto-formatu, jak opisano w tej sekcji. Wartość domyślna textwidthto 0. Ponadto :righti :centerdomyślnie 80, a nie 79.

Jak, dlaczego 79 został wybrany, to nie może być bezpośredni hold-over z VI ponieważ gq, gwi auto-Format nie istnieją w VI. Jest to głównie spekulacja, ale uważam, że domyślną 79 dla automatycznego formatowania wybrano ze względu na spójność z istniejącym automatycznym zawijaniem vi. To dotyczy gqi gwjest efektem ubocznym; można by oczekiwać, że 80 zostałoby wybrane inaczej.

W vi (i vim if textwidth=0) tekst rozpoczyna automatyczne zawijanie przy szerokości okna minus wrapmargin. Jeśli jednak wrapmargin=0nie nastąpi automatyczne owijanie. Oznacza to, że jeśli używasz ADM-3A z limitem 80 znaków, przy wrapmargin=1maksymalnej szerokości z automatycznym zawijaniem wynosi 79. Zaletą tego zachowania jest to, że istnieje miejsce, w którym kursor może żyć, czekając, aby zobaczyć, co następna postać będzie przed podjęciem decyzji, gdzie owinąć. Oczywiście vi i vim mogą umieścić kursor w następnym wierszu (jak zaobserwowano podczas wpisywania bardzo długiego słowa), ale pozostawienie dodatkowej kolumny jest nieco przyjemniejsze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.