¿Cómo copiar texto de varias páginas del terminal al portapapeles?
13
Estaba viendo una página de manual para un software en mi máquina y necesitaba copiar y pegar parte de ese texto, pero el texto era mucho más que una página. Soy consciente de que puedo dirigir la salida a un archivo y usar un software basado en la interfaz de usuario, como gedit, para copiar el texto que necesito. ¿Pero se puede hacer esto desde la terminal?
Joseph sugirió un método de línea de comandos (un poco complicado para mí, todavía no soy bueno con las expresiones regulares en Linux). Pero me pregunto si hay una manera de hacerlo mientras todavía estoy en la terminal, usando el mouse .
Espero obtener una respuesta genérica, sin embargo, estoy usando Ubuntu.
Tengo un par de ideas imperfectas, pero quizás útiles.
Método 1 - mousey.
Usa la barra de desplazamiento del terminal.
Detalles (suponiendo xterm; se requerirán ajustes para otros terminales).
Habilite la barra de desplazamiento si aún no lo está. (En xterm, está en el menú que obtienes con Ctrl + Button2.)
Asegúrese de que lessno se esté ejecutando con la -copción (tengo esta opción habilitada en mi LESSvariable de entorno, pero interfiere con lo que estamos a punto de hacer, así que tengo que escribir -cpara desactivarla).
Usando los lesscomandos que desee, desplácese hacia arriba o hacia abajo para que la primera línea que desea copiar sea visible en la pantalla.
triple-Button1 su línea de partida elegida para seleccionarla.
Desplácese hacia abajo hasta que la última línea que desea copiar sea visible en la pantalla. Debe usar solo la barra espaciadora u otras teclas de desplazamiento simples, no una /búsqueda; el punto aquí es lessenviar todas las líneas al terminal para que puedan copiarse.
Button3 en la línea final elegida para ampliar la selección.
Posible dificultad: su búfer de desplazamiento puede no ser lo suficientemente grande. Eso se puede cambiar xtermcon la opción de línea de comando saveLineso recurso -sl, pero no sé cómo cambiarlo en un xterm que ya se está ejecutando.
Método 2: no mousey.
Use el |comando (pipe) lesspara enviar el texto a xclip.
Detalles:
Con los lesscomandos que desee, desplácese hacia arriba o hacia abajo para colocar la última línea que desea copiar en la parte superior de la pantalla. Puede omitir este paso y el siguiente si desea copiar hasta el final.
Use el mcomando (marca) para establecer una marca en la posición final elegida. Las marcas son una característica útil por sí mismas, y ya debe conocerlas vi, pero en caso de que no lo haga: mxestablece una marca, donde xpuede ser cualquier letra, y lo 'xregresa allí más tarde.
Ahora desplácese hacia arriba para que la primera línea que quiera copiar esté en la parte superior de la pantalla.
Use el comando de tubería: |xque le solicitará que ingrese un comando externo. El xdebe ser la misma letra de marca que ha utilizado en el mcomando, o $para "todo el camino hasta el final". Escribe xclipallí.
El simple caso de copiar toda la página man se reduce a g|$xclipEnter.
Advertencia (es decir, lo horrible que me acaba de pasar ): xclipestará semi-en segundo plano, ejecutándose como parte del lessgrupo de procesos. Si intenta suspender less, inicie otro trabajo en el mismo terminal y péguelo, no funcionará. Luego, cuando más adelante coloque en primer plano el trabajo man/ less, de repente aparecerá la pasta. Creo que esto debería considerarse un xcliperror ...
Los usuarios de Mac pueden usar pbcopy si no tienen instalado xclip.
Mike Hedman el
3
El multiplexor de terminal tiene tmuxo screensuele tener una funcionalidad como esta (es decir, guardar parte del búfer de desplazamiento hacia atrás para archivarlo o canalizarlo a algún comando) y usarlos suele ser una buena idea de todos modos, por lo que es posible que desee echar un vistazo a uno de esos .
man man | your_magic_here | xclip -selection clipboard
Ctrl+ Val contenido de tu corazón. Puede eliminar -selection clipboardpara elegir pegar haciendo clic con el botón central del mouse (llamada selección principal)
Tenga en cuenta que your_magic_herees un marcador de posición para un filtro de texto ( sed/ awk/ perl/ ...) que selecciona la parte deseada de la página de manual de acuerdo con su caso de uso específico, que no describió, así que me temo que no puedo ser específico con un ejemplo
Aparte de xclipallí también hay xsel(y otros). También es posible que desee echar un vistazo a esta discusión del portapapeles .
Peter
¿Hay alguna manera de hacerlo usando el mouse? De modo que cuando el mouse llegue al final de la página, la página se desplazaría.
Muhammad Gelbana
0
Depende de su programa de terminal, pero la mayoría de los programas de terminal no tienen la funcionalidad para guardar el texto seleccionado.
LXTerminal, uxterm, Konsole y GNOME Terminal parecen carecer de esta 'característica', pero puede haber otros que sí la tengan. Mire la estructura del menú de su programa de terminal y puede haber algo como "Guardar seleccionados"
Suponiendo que use gnome-terminaly lesscomo buscapersonas man, puede:
Correr lesspor manla -Xclave para desactivar la pantalla alterna, por ejemplo:LESS=-X man less
Esto permitirá agregar salida manal búfer de historial del emulador de terminal. Consulte esta respuesta para obtener más detalles /unix//a/38638/87918 .
Desplácese a la última página de texto que desea copiar. (Todo el texto desplazado se guardará en el búfer del historial durante el desplazamiento)
Seleccione el texto con el mouse al gnome-terminalprincipio de la última página a la primera, arrastrando el mouse al borde superior de la ventana. El proceso detallado de selección de texto se describe aquí :
Esto no funciona en la Terminal de Gnome. En cambio, lo que tiene que hacer es comenzar la selección con el botón izquierdo del mouse y, mientras lo hace, arrastre el cursor del mouse al borde de la ventana (o fuera de la ventana). GT desplazará las cosas por usted, ampliando la selección en el proceso. El desplazamiento de GT es lo suficientemente rápido como para que este sea un proceso razonablemente conveniente e intuitivo, posiblemente mejor que el de xterm.
Ahora tiene el texto seleccionado (las páginas que desee) que puede copiar y pegar donde quiera.
Usa el | (pipe) comando en menos con marcas como ha sido respondido por Wumpus Q. Wumbley en su segunda opción , pero redirigiendo usando tee para agregar a un archivo existente que ya está allí con el propósito:
|tee >> ~/helpaggregator.txt
Sugiero un archivo existente, ya que generalmente se necesita consultar al aprender nuevos comandos y a uno le gusta mantenerlos consolidados. Además, la finalización de pestañas es útil.
El multiplexor de terminal tiene
tmux
oscreen
suele tener una funcionalidad como esta (es decir, guardar parte del búfer de desplazamiento hacia atrás para archivarlo o canalizarlo a algún comando) y usarlos suele ser una buena idea de todos modos, por lo que es posible que desee echar un vistazo a uno de esos .fuente
Como se describe en Nixcraft :
Obtener
xclip
:o
en un sistema basado en RPM.
man man | your_magic_here | xclip -selection clipboard
-selection clipboard
para elegir pegar haciendo clic con el botón central del mouse (llamada selección principal)Tenga en cuenta que
your_magic_here
es un marcador de posición para un filtro de texto (sed
/awk
/perl
/ ...) que selecciona la parte deseada de la página de manual de acuerdo con su caso de uso específico, que no describió, así que me temo que no puedo ser específico con un ejemplofuente
xclip
allí también hayxsel
(y otros). También es posible que desee echar un vistazo a esta discusión del portapapeles .Depende de su programa de terminal, pero la mayoría de los programas de terminal no tienen la funcionalidad para guardar el texto seleccionado.
LXTerminal, uxterm, Konsole y GNOME Terminal parecen carecer de esta 'característica', pero puede haber otros que sí la tengan. Mire la estructura del menú de su programa de terminal y puede haber algo como "Guardar seleccionados"
fuente
Suponiendo que use
gnome-terminal
yless
como buscapersonasman
, puede:less
porman
la-X
clave para desactivar la pantalla alterna, por ejemplo:LESS=-X man less
Esto permitirá agregar salida
man
al búfer de historial del emulador de terminal. Consulte esta respuesta para obtener más detalles /unix//a/38638/87918 .gnome-terminal
principio de la última página a la primera, arrastrando el mouse al borde superior de la ventana. El proceso detallado de selección de texto se describe aquí :fuente
Usa el | (pipe) comando en menos con marcas como ha sido respondido por Wumpus Q. Wumbley en su segunda opción , pero redirigiendo usando tee para agregar a un archivo existente que ya está allí con el propósito:
Sugiero un archivo existente, ya que generalmente se necesita consultar al aprender nuevos comandos y a uno le gusta mantenerlos consolidados. Además, la finalización de pestañas es útil.
fuente