Copie un texto largo de una sola línea desde un terminal con una línea de cambio no deseada

14

locate ... | less genera una ruta larga, que se muestra como varias líneas en el terminal, aunque en realidad es una sola línea.

Copio la ruta desde la terminal seleccionando el texto con el mouse y presionando Ctrl+ Shift+ C. Cuando lo pego en un archivo de texto, recibo una línea de cambio no deseada en el texto, exactamente de la misma manera que se muestra en el terminal.

Pero recuerdo que a veces puedo copiar una salida de ruta larga locate ... | lesssin introducir cambios de línea no deseados, y a veces no puedo. No me doy cuenta si hago algo diferente.

¿Entonces me pregunto cómo asegurarme de que el problema no suceda? ¡Gracias!

Mi sistema operativo: Ubuntu 12.04.

Mi terminal: Gnome Terminal 3.4.1.1

Tim
fuente
Pero Ctrl + Shift + C a veces puede copiar una línea larga sin copiar la línea de cambio. Aún hay problemas diferentes, creo.
Tim
¿Entonces su Q es más sobre por qué o cómo controlar este comportamiento?
slm
Si. Copio el texto del terminal usando la tecla de acceso directo (que supongo que es la forma más rápida), no dirigiendo la salida a un archivo
Tim
¿Hay algo más acerca de cuándo el comportamiento es de una manera frente a la otra?
slm

Respuestas:

3

En lugar de copiar lo que se muestra en el terminal (solo lo que cabe en la pantalla, con), copie el texto real. Use una de las utilidades externas xsel o xclip (tienen en su mayoría las mismas características, usaré xsel en esta respuesta) para copiar datos desde o hacia el portapapeles X. Para copiar al portapapeles, pase el contenido deseado en la entrada estándar. Al pegar desde el portapapeles, el contenido se escribe en la salida estándar.

En menos, use el |comando para canalizar un montón de líneas a través de un comando. Desplácese hasta la primera línea sobre la que desea actuar, escriba mmpara establecer una marca, desplácese hasta la última línea y escriba |mxsel -by presione Enter. Dos marcas están predefinidas: ^para el comienzo del archivo, $para el final del archivo. Por lo tanto, para copiar todo el archivo, use <|$xsel -b. Para copiar una sola línea, use mm|mxsel -by Enter.

Elimine la -bopción de copiar a la selección principal en lugar del portapapeles.

Gilles 'SO- deja de ser malvado'
fuente
3

El comportamiento real de esto es el siguiente:

si está dentro lessy tiene un archivo con una línea muy larga, si se desplaza sobre la línea larga hacia abajo y hacia arriba, tiene varias líneas al copiar todo el texto. Después de eso, cuando desplace las líneas divididas hacia abajo sobre la parte inferior del terminal y desplace las líneas hacia arriba nuevamente, los saltos de línea se eliminarán nuevamente.

Para visualización:

ingrese la descripción de la imagen aquí

bobbel
fuente
2

Puede copiar las líneas de salida sin nuevas líneas adicionales (saltos de línea) si el texto se envió directamente al terminal.
El terminal puede realizar un seguimiento de dónde están los extremos de la línea real.

Pero si las líneas fueron producidas por lessun pagerprograma similar o por otro , el terminal no sabe dónde están las nuevas líneas. El buscapersonas usa el terminal como una pantalla completa de caracteres y le dice al terminal "ponga estos caracteres allí" y operaciones como desplazamiento. Pero, para la terminal, no hay forma de ver hacia dónde se dirigen las nuevas líneas.

Volker Siegel
fuente
2
Descubrí que a veces copio los saltos de línea y otras no. Es inconsistente a través del tiempo. Hoy ambos sucedieron cuando presioné Ctrl-shift-c locate <something> | lessen dos casos diferentes.
Tim
Less dibuja su propia pantalla, normalmente, para que el terminal no vea dónde terminan las líneas. Pero se puede configurar menos, en realidad no hace nada para archivos cortos que se ajustan a la altura de la pantalla. Entonces, es posible que la diferencia entre los casos fuera que menos estaba en un modo diferente. (eche un vistazo echo $LESS, tal vez hay opciones interesantes por menos.)
Volker Siegel
@Tim esto también me ha estado molestando durante años. ¿Quizás la respuesta de @Niknah sugiere la causa? A menudo cambio entre -Smodos, así que quizás eso también lo empeora.
Dan Gravell
1
@Tim: descubrí algo que podría o no ser cierto en su sistema operativo y menos versión: el comportamiento de la copia varía dependiendo de cómo llegué a la línea de destino en menos. Si busco hacia adelante, la copia no incluye las nuevas líneas de ajuste (es decir, copia el contenido original de la línea larga). Sin embargo, si he buscado hacia atrás a través del archivo para llegar a la línea de destino, entonces la copia incluye las nuevas líneas y divide la línea larga en varias líneas separadas. Parece consistente en Mac y Linux para mí.
erik.weathers
2

En less, si selecciona varias líneas de texto envueltas y luego lo copia, aparecerá como una sola línea.

Si presiona y PgUpluego copia el mismo texto, aparecerá como varias líneas.

PgDnestá bien, las flechas están bien. Pero PgUphace que el texto se divida.

niknah
fuente
Esa no es exactamente la verdadera causa del comportamiento. Vea mi respuesta: unix.stackexchange.com/a/445590/105308
bobbel
0

Si el objetivo es copiar y pegar, lo uso en catlugar de lesso morey luego el terminal lo captura como realmente es en lugar de como se está mostrando.

Amós
fuente