Copie um texto longo de linha única de um terminal com linhas de alteração indesejadas

12

locate ... | less produz um caminho longo, que é mostrado como várias linhas no terminal, embora na verdade seja uma única linha.

Copio o caminho do terminal selecionando o texto com o mouse e pressionando Ctrl+ Shift+ C. Quando colo em um arquivo de texto, recebo uma linha de alteração indesejada no texto, exatamente da mesma maneira que é mostrada no terminal.

Mas eu lembro que às vezes consigo copiar um caminho longo locate ... | lesssem introduzir alterações de linha indesejadas e às vezes não consigo. Não sei se faço algo diferente.

Então, eu me pergunto como garantir que o problema não aconteça? Obrigado!

Meu SO: Ubuntu 12.04.

Meu terminal: Gnome Terminal 3.4.1.1

Tim
fonte
Mas Ctrl + Shift + C pode copiar uma linha longa em algum momento sem copiar a linha de alteração. Ainda problemas diferentes, eu acho.
Tim
Portanto, seu Q é mais sobre por que ou como controlar esse comportamento?
slm
Sim. Eu copiar o texto para fora do terminal usando a tecla de atalho (que eu acho que é a maneira mais rápida), não direcionando a saída para um arquivo
Tim
Existe algo mais sobre quando o comportamento é de uma maneira versus a outra?
slm

Respostas:

3

Em vez de copiar o que é exibido no terminal (apenas o que cabe na tela), copie o texto real. Use um dos utilitários externos xsel ou xclip (eles têm principalmente os mesmos recursos, usarei o xsel nesta resposta) para copiar dados da ou para a área de transferência do X. Para copiar para a área de transferência, passe o conteúdo desejado na entrada padrão. Ao colar da área de transferência, o conteúdo é gravado na saída padrão.

Em menos, use o |comando para canalizar um monte de linhas através de um comando. Vá até a primeira linha em que deseja atuar, digite mmpara definir uma marca, vá até a última linha e digite |mxsel -be pressione Enter. Duas marcas são predefinidas: ^para o início do arquivo, $para o final do arquivo. Portanto, para copiar o arquivo inteiro, use <|$xsel -b. Para copiar uma única linha, use mm|mxsel -be Enter.

Remova a -bopção de copiar para a seleção principal em vez da área de transferência.

Gilles
fonte
3

O comportamento real disso é o seguinte:

se você estiver dentro lesse tiver um arquivo com uma linha muito longa, se você rolar a linha longa para baixo e voltar, você terá várias linhas ao copiar o texto inteiro. Depois disso, quando você rolar as linhas divididas para baixo na parte inferior do terminal e rolar as linhas para cima novamente, as quebras de linha serão removidas novamente.

Para visualização:

insira a descrição da imagem aqui

bobina
fonte
2

Além disso less, se você selecionar várias linhas de texto agrupadas e depois copiá-las, elas serão reduzidas como uma linha.

Se você pressionar PgUpe copiar o mesmo texto, ele diminuirá como várias linhas.

PgDnestá bem, setas estão bem. Mas PgUpfaz com que o texto seja dividido.

niknah
fonte
Essa não é exatamente a verdadeira causa do comportamento. Veja a minha resposta: unix.stackexchange.com/a/445590/105308
bobbel
1

Você pode copiar as linhas de saída sem novas linhas extras (quebras de linha) se o texto foi enviado diretamente para o terminal.
O terminal pode acompanhar onde está a linha real.

Mas se as linhas foram produzidas por lessou um pagerprograma semelhante , o terminal não sabe onde estão as novas linhas. O pager usa o terminal como uma tela cheia de caracteres e diz ao terminal "coloque esses caracteres lá" e operações como rolagem. Mas, para o terminal, não há como ver para onde se destinam as novas linhas.

Volker Siegel
fonte
2
Descobri que às vezes copio as quebras de linha e às vezes não. É inconsistente ao longo do tempo. Hoje os dois aconteceram quando eu pressione Ctrl-shift-c locate <something> | lessem dois casos diferentes.
Tim
Menos desenha sua própria tela, normalmente, para que o terminal não veja onde as linhas terminam. Porém, menos pode ser configurado na verdade não faz nada para arquivos curtos que se ajustam à altura da tela. Portanto, é possível que a diferença entre os casos tenha sido que menos estivesse em um modo diferente. (dê uma olhada echo $LESS, talvez há opções interessantes para menos.)
Volker Siegel
@ Tim isso também me incomoda há anos. Talvez a resposta de @ niknah sugira a causa? Eu sempre alterno entre os -Smodos, então talvez isso também piore.
Dan Gravell
11
@ Tim: Descobri algo que pode ou não ser verdade no seu sistema operacional e na versão menos: o comportamento da cópia varia dependendo de como cheguei à linha de destino em menos. Se estou pesquisando adiante, a cópia não inclui as novas linhas de quebra automática (ou seja, copia o conteúdo original da linha longa). No entanto, se eu tiver pesquisado para trás no arquivo para chegar à linha de destino, a cópia incluirá as novas linhas e dividirá a linha longa em várias linhas separadas. Parece consistente no Mac e Linux para mim.
Erik.weathers
0

Se o objetivo é copiar e colar, eu uso em catvez de lessou moree o terminal captura como realmente é, e não como está sendo exibido.

Amos
fonte