Perché Vim imposta la larghezza massima del testo su 79 anziché su 80?


13

Sono un po 'perplesso su alcuni valori predefiniti in Vim. In particolare, per gq{motion}, si dice che

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

Ho pensato che avrebbe dovuto avere più senso se invece avesse impostato la larghezza massima su 80.

Qualcuno può illuminarmi di questo? Immagino che mi manchi qualcosa.


1
Bene, 80è uno "standard" piuttosto arbitrario per cominciare, quindi ... perché no 79? Ora, avvolgendo le linee 79in un 80terminale a livello di colonna si dà un po 'più spazio a destra e può migliorare la leggibilità. github.com/vim/vim/blob/…
romainl

2
Forse, sul 80terminale a livello di colonna, l'ultima colonna era riservata al simbolo di avvolgimento? Tuttavia, se hai i numeri di riga attivi, avranno sicuramente più di una sola colonna. Quindi, sono ancora perplesso. Inoltre, dal codice che hai collegato, è 79il valore massimo che può essere utilizzato? Forse non ho capito cosa ho letto.
Atcold,

3
... oppure puoi semplicemente impostare textwidthed eseguire.
VanLaser,

13
80 è il numero di colonne di vecchi terminali hardware e successivamente delle schermate MS DOS (modalità testo). tw=79anziché tw=80perché la visualizzazione di una riga lunga 80 caratteri su un terminale di 80 colonne stampa una nuova riga in più.
Sato Katsura,

7
Viene sempre aggiunta una nuova riga. Se capita di essere l'81 ° personaggio su un terminale largo 80 caratteri, otterrai solo una linea completa seguita da una vuota.
Sato Katsura,

Risposte:


7

Non ho alcuna prova che questo sia il motivo per cui 79 è stato originariamente scelto, ma un buon motivo per lasciarlo a quel valore è perché se usi 'list'con un valore incluso eolin 'listchars'allora la visualizzazione del listchar causerà un 80 caratteri- linea di lunghezza per passare alla riga successiva in un terminale largo 80 caratteri.

Se la riga è lunga solo 79 caratteri, l'80a colonna è libera per la fine della riga listchar.


Non l'ho capito. Dove dovrei usare 'list'? Cosa dovrebbe fare?
Atcold,

@Atcold È un'opzione che fa apparire sullo schermo personaggi che sono solitamente invisibili (come la fine della linea). Guarda :help 'list'o prova a correre :set listper vederlo in azione.
Ricco

:set listnon fa molto. Scommetto che non ho il eolin listchars. Non sono molto sicuro che questo sia il motivo dietro i 79personaggi. Credo che @ sato-katsura abbia la migliore risposta nel commento.
Atcold,

eolè 'listchars'di default, ma ovviamente è possibile che qualcosa nella tua configurazione sia stato rimosso. Dichiaro espressamente nella mia risposta che non ho motivo di credere che questa fosse la ragione storica per cui 79 era stato originariamente scelto. Sto solo dando un'altra ragione per cui continua ad essere un buon valore da usare, ora.
Ricco

@Atcold. Newline non viene visualizzato per impostazione predefinita, non ha senso riservare un carattere in più per questo.
Christian Brabandt,

6

E 'importante rendersi conto che questo "default" è valida solo per le gqe gwcomandi e auto-formato come descritto in tale sezione. Il valore predefinito textwidthè 0. Inoltre, :righte :centerpredefinito a 80, non 79.

Per quanto riguarda il motivo per cui 79 è stato scelto, non può essere una diretta presa-over da vi poiché gq, gwe auto-formato non esistono in VI. Si tratta principalmente di speculazioni, ma credo che il 79 predefinito per il formato automatico sia stato scelto per coerenza con il wrapping automatico esistente di vi. Che ciò valga per gqed gwè un effetto collaterale; ci si potrebbe aspettare che 80 sarebbero stati scelti diversamente.

In vi (e in vim if textwidth=0) il testo inizia a scorrere automaticamente alla larghezza della finestra meno wrapmargin. Tuttavia, se wrapmargin=0non si verificherà alcun avvolgimento automatico. Ciò significa che se si utilizzava un ADM-3A con un limite di 80 caratteri, con wrapmargin=1, la larghezza massima con l'auto-wrapping è 79. Un vantaggio di questo comportamento è che c'è un posto dove il cursore può vivere in attesa di vedere cosa il prossimo personaggio sarà prima di decidere dove avvolgere. Naturalmente, vi e vim potrebbero posizionare il cursore sulla riga successiva (come osservato quando si digita una parola molto lunga) ma lasciare una colonna aggiuntiva è un po 'più bello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.