4

Как и большинство людей, я использую less качестве терминального пейджера. Иногда я просматриваю файлы, состоящие из очень длинных строк простого или размеченного текста. По умолчанию less сгибает эти линии по краю окна терминала. То есть слова в последнем столбце разбиваются, что затрудняет чтение текста. Есть ли способ получить less чтобы вместо этого переносить строки на границах слов, так же, как это делает режим визуальных линий fmt или Emacs?

Я знаю, что я мог бы просто передать ввод через fmt перед его просмотром, хотя это требует от меня заранее знать ширину моего терминала. Я надеялся, что есть какой-то способ получить less чтобы красиво переносить строки и автоматически переформатировать их при изменении размера окна терминала.

3 ответа3

1

Нет . Для того, чтобы проверить, скачать последнюю less источник и обзор input.c вокруг линии 178:

177             /*
178              * The char won't fit in the line; the line
179              * is too long to print in the screen width.
180              * End the line here.
181              */
182             if (chopline || hshift > 0)
183             {
184                 do
185                 {
186                     if (ABORT_SIGS())
187                     {
188                         null_line();
189                         return (NULL_POSITION);
190                     }
191                     c = ch_forw_get();
192                 } while (c != '\n' && c != EOI);
193                 new_pos = ch_tell();
194                 endline = TRUE;
195                 quit_if_one_screen = FALSE;
196             } else

Форматирование так, как это делает fmt , нетривиально с точки зрения производительности. Алгоритм fmt составляет около 50 строк прямого и обратного сканирования, чтобы получить оптимальное расположение. Кроме того, алгоритм fmt выглядит (IMO) удивительным, если желаемая ширина значительно больше фактического содержимого, поэтому она может не подходить для общего соответствия.

По умолчанию man использует less -is это ИМО, но это не то, что вы хотите.

Так... Я думаю, что единственный способ, хотя по общему признанию это не следует за изменениями терминала, является:

fmt -w $(tput cols) | less
-1

Выдержка из менее справочной страницы:

-S or --chop-long-lines
    Causes lines longer than the screen width to be chopped rather than folded.
    That is, the portion of a long line that does not fit in the screen width
    is not shown. The default is to fold long lines; that is, display the
    remainder on the next line.
-1

Лучший вариант, который я нашел для этого, это использовать fmt для форматирования текста и передачи его в меньшем количестве.

  • имя файла fmt | Меньше

Это позволит достичь того, что вы ищете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .