Почему Vim устанавливает максимальную ширину текста на 79 вместо 80?

13

Я немного озадачен некоторыми значениями по умолчанию в Vim. В частности gq{motion}, сказано, что

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

Я думал, что это должно было бы иметь больше смысла, если бы 80вместо этого было установлено значение максимальной ширины .

Может ли кто-нибудь просветить меня об этом? Я думаю, я что-то упустил.

Atcold
источник
1
Ну, 80для начала это довольно произвольный "стандарт", так что ... почему бы и нет 79? Теперь, перенос строк 79в 80терминале шириной в столбцы дает немного больше места справа и может улучшить читаемость. github.com/vim/vim/blob/…
romainl
2
Может быть, в 80терминале на всю колонну последний столбец был зарезервирован для символа переноса? Тем не менее, если у вас есть номера строк, то они определенно займут более одного столбца. Итак, я все еще озадачен. Кроме того, из того кода, который вы связали, является 79ли его максимальное значение? Может быть, я не понял, что я читаю.
Atcold
3
... или вы можете просто установить textwidthи покончить с.
VanLaser
13
80 - количество столбцов старых аппаратных терминалов, а затем экранов MS DOS (текстовый режим). tw=79а не tw=80потому, что при отображении строки длиной 80 символов на терминале 80 столбцов выводится дополнительная новая строка.
Сато Кацура
7
Новая строка всегда добавляется. Если это оказывается 81-й символ в терминале шириной 80 символов, вы просто получаете полную строку, за которой следует пустая строка.
Сато Кацура

Ответы:

7

У меня нет никаких доказательств того, что именно поэтому изначально был выбран 79, но одна веская причина оставить его на этом значении, потому что, если вы используете 'list'со значением, включенным для eolв, 'listchars'то отображение listchar вызовет 80-символьный длина строки для переноса на следующую строку в терминале шириной 80 символов.

Если длина строки составляет всего 79 символов, тогда 80-й столбец свободен для конца строки listchar.

Богатый
источник
Я не получил это. Где я должен использовать 'list'? Что он должен делать?
Atcold
@Atcold Это опция, которая заставляет символы, которые обычно невидимы (например, конец строки), отображаться на экране. Посмотрите :help 'list'или просто попробуйте запустить, :set listчтобы увидеть это в действии.
Богатые
:set listне делает много Могу поспорить, у меня нет eolв listchars. Я не очень уверен, что это причина для 79персонажей. Я считаю, что @ sato-katsura имеет лучший ответ в комментарии.
Atcold
eolвключен 'listchars'по умолчанию, но, конечно, возможно, что-то в вашем конфиге это удалило. Я специально заявляю в своем ответе, что у меня нет оснований полагать, что это была историческая причина, по которой 79 был первоначально выбран. Я просто привожу еще одну причину, по которой он по-прежнему является хорошим значением для использования.
Богатые
@Atcold. Новая строка по умолчанию не отображается, нет смысла резервировать для этого дополнительный символ.
Кристиан Брабандт
6

Важно понимать , что это « по умолчанию» относится только к gqи gwкомандам и авто-формату , как описано в этом разделе. Значение по умолчанию textwidthравно 0. Кроме того, :rightи по :centerумолчанию 80, а не 79.

А почему 79 было выбран, он не может быть прямым удерживания в течение от VI , так как gq, gwи авто-формат не существует в VI. В основном это предположение, но я считаю, что значение 79 для автоматического форматирования было выбрано для согласованности с существующим автоматическим переносом в vi. То, что это относится gqи gwявляется побочным эффектом; Можно ожидать, что 80 был бы выбран в противном случае.

В vi (и в vim if textwidth=0) текст начинает автообтекание при минус ширине окна wrapmargin. Тем не менее, если wrapmargin=0автоматическая упаковка не будет выполнена. Это означает, что если вы использовали ADM-3A с пределом в 80 символов, wrapmargin=1максимальная ширина с автоматическим переносом составляет 79. Преимуществом этого поведения является то, что есть место для курсора, чтобы жить во время ожидания, чтобы увидеть, что следующий персонаж будет перед тем, как решить, где его переносить. Конечно, vi и vim могут поместить курсор на следующую строку (как это видно при наборе очень длинного слова), но оставить лишний столбец немного приятнее.

масса
источник