Pode menos linhas de contorno como fmt faz?

4

Como a maioria das pessoas, eu uso less como meu pager de terminal. Ocasionalmente, vejo arquivos que consistem em linhas muito longas de texto simples ou marcado. Por padrão, less dobra essas linhas na borda da janela do terminal. Ou seja, as palavras são quebradas na última coluna, dificultando a leitura do texto. Existe alguma maneira de obter less para quebrar as linhas nos limites das palavras, da mesma forma que fmt ou o modo de linha visual Emacs faz?

Estou ciente de que eu poderia simplesmente canalizar a entrada através de fmt antes de visualizá-la, embora isso requeira que eu saiba antecipadamente a largura do meu terminal. Eu estava esperando que houvesse uma maneira de obter less para moldar linhas e para reformatá-las automaticamente quando a janela do terminal fosse redimensionada.

    
por Psychonaut 10.06.2014 / 09:30

3 respostas

1

Não. Para verificar, faça o download da última less source e revise input.c na linha 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

A formatação da maneira como o fmt é não-trivial, em termos de desempenho. O algoritmo fmt é sobre 50 linhas de digitalização para frente e para trás para obter o layout ideal. Além disso, o algoritmo fmt parece (IMO) instável se a largura desejada for significativamente maior do que o conteúdo real, portanto, pode não ser um bom ajuste geral.

man usa less -is por padrão, o que o IMO é muito bom, mas não o que você quer.

Então ... eu acho que a única maneira, apesar de admitir que não segue os redimensionamentos do terminal, é:

fmt -w $(tput cols) | less
    
por 01.12.2015 / 21:22
-1

Trecho da menos página do manual :

-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.
    
por 10.06.2014 / 12:05
-1

A melhor opção que eu encontrei para isso é usar fmt para formatar o texto e canalizá-lo em menos.

  • fmt nome do arquivo | menos

Isso vai conseguir o que você está procurando.

    
por 02.02.2015 / 23:55