Pourquoi Vim définit la largeur maximale du texte à 79 au lieu de 80?

13

Je suis un peu perplexe à propos de certaines valeurs par défaut dans Vim. En particulier, car gq{motion}, dit-on,

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

Je pensais que cela aurait dû avoir plus de sens s'il avait défini la largeur maximale à la 80place.

Quelqu'un peut-il m'éclairer à ce sujet? Je suppose que je manque quelque chose.

Atcold
la source
1
Eh bien, 80est-ce un "standard" assez arbitraire pour commencer alors ... pourquoi pas 79? Maintenant, l'encapsulation des lignes 79dans un 80terminal à l'échelle des colonnes donne un peu plus de place à droite et peut améliorer la lisibilité. github.com/vim/vim/blob/…
romainl
2
Peut-être que sur le 80terminal à l'échelle des colonnes, la dernière colonne était réservée au symbole d'habillage? Pourtant, si vous avez des numéros de ligne, ils prendront certainement plus d'une seule colonne. Donc, je suis toujours perplexe. De plus, à partir du code que vous avez lié, 79la valeur maximale peut-elle être utilisée? Peut-être que je n'ai pas compris ce que j'ai lu.
Atcold
3
... ou vous pouvez simplement régler textwidthet en finir.
VanLaser
13
80 est le nombre de colonnes des anciens terminaux matériels, et plus tard des écrans MS DOS (mode texte). tw=79au lieu de tw=80car afficher une ligne de 80 caractères sur un terminal de 80 colonnes imprime une nouvelle ligne supplémentaire.
Sato Katsura
7
Une nouvelle ligne est toujours ajoutée. S'il se trouve qu'il s'agit du 81e caractère sur un terminal de 80 caractères de large, vous obtenez simplement une ligne complète suivie d'une ligne vide.
Sato Katsura

Réponses:

7

Je n'ai aucune preuve que c'est la raison pour laquelle 79 a été choisi à l'origine, mais une bonne raison de le laisser à cette valeur est parce que si vous utilisez 'list'avec une valeur incluse eoldans, 'listchars'l'affichage de listchar provoquera 80 caractères. ligne de longueur pour passer à la ligne suivante dans un terminal de 80 caractères.

Si la ligne ne comporte que 79 caractères, la 80e colonne est libre pour que la fin de la ligne listcharpuisse s'asseoir.

Riches
la source
Je ne l'ai pas compris. Où suis-je censé utiliser 'list'? Que doit-il faire?
Atcold
@Atcold C'est une option qui permet d'afficher à l'écran des caractères qui sont généralement invisibles (comme la fin de la ligne). Voir :help 'list'ou simplement essayer de courir :set listpour le voir en action.
Rich
:set listne fait pas grand chose. Je parie que je n'ai pas eoldans le listchars. Je ne suis pas sûr que ce soit la raison derrière les 79personnages. Je crois que @ sato-katsura a la meilleure réponse dans le commentaire.
Atcold
eolest 'listchars'par défaut, mais bien sûr, il est possible que quelque chose dans votre configuration l'ait supprimé. Je déclare spécifiquement dans ma réponse que je n'ai aucune raison de croire que c'était la raison historique pour laquelle 79 a été choisi à l'origine. Je donne juste une autre raison pour laquelle il continue d'être une bonne valeur à utiliser, maintenant.
Rich
@Atcold. La nouvelle ligne n'est pas affichée par défaut, cela n'a pas de sens de réserver un caractère supplémentaire pour cela.
Christian Brabandt
6

Il est important de se rendre compte que ce « défaut » applique uniquement aux gqet gwcommandes et format automatique comme décrit dans cette section. La valeur par défaut textwidthest 0. De plus, :rightet la :centervaleur par défaut est 80, pas 79.

Quant à savoir pourquoi 79 a été choisi, il ne peut pas être mise en réserve de vi directe depuis gq, gwet le format automatique n'existent pas dans vi. C'est surtout de la spéculation, mais je crois que la valeur par défaut de 79 pour le formatage automatique a été choisie par souci de cohérence avec le conditionnement automatique existant de vi. Que cela s'applique gqet gwest un effet secondaire; on pourrait penser que 80 auraient été choisis autrement.

Dans vi (et dans vim si textwidth=0), le texte démarre automatiquement à la largeur de la fenêtre moins wrapmargin. Cependant, si wrapmargin=0aucun habillage automatique n'a lieu. Cela signifie que si vous utilisiez un ADM-3A avec une limite de 80 caractères, avec wrapmargin=1, la largeur maximale avec habillage automatique est de 79. Un avantage de ce comportement est qu'il y a une place pour que le curseur vive en attendant de voir ce que le personnage suivant va être avant de décider où envelopper. Bien sûr, vi et vim pourraient placer le curseur sur la ligne suivante (comme observé lors de la frappe d'un mot très long) mais laisser une colonne supplémentaire est un peu plus agréable.

Masse
la source