Wie kopiere ich mehrseitigen Text vom Terminal in die Zwischenablage?


13

Ich war eine Sicht Mann - Seite für eine Software auf meinem Rechner und ich brauchte einige diesen Text kopieren und einfügen , aber der Text war viel mehr als eine Seite. Ich bin mir bewusst, dass ich die Ausgabe in eine Datei umleiten und UI-basierte Software wie gedit verwenden kann, um den benötigten Text zu kopieren. Aber kann das vom Terminal aus gemacht werden?

Joseph schlug eine Kommandozeilenmethode vor (für mich etwas kompliziert, ich kann noch nicht gut mit regulären Ausdrücken unter Linux umgehen). Aber ich frage mich, ob es eine Möglichkeit gibt, dies zu tun, während ich noch mit der Maus am Terminal bin .

Ich hoffe, ich bekomme eine generische Antwort, aber ich benutze Ubuntu.

Antworten:


9

Ich habe ein paar unvollkommene, aber vielleicht nützliche Ideen.

Methode 1 - Maus.

Verwenden Sie die Terminal-Bildlaufleiste.

Details (vorausgesetzt xterm, für andere Terminals sind Anpassungen erforderlich.)

  1. Aktivieren Sie die Bildlaufleiste, falls dies noch nicht geschehen ist. (In xterm, es ist in dem Menü, das Sie mit Strg + Button2 erhalten.)
  2. Achten Sie darauf , lessnicht mit der laufenden -cOption (ich habe diese Option in meinem aktiviert LESSUmgebungsvariable, aber es stört , was wir tun sollen, so dass ich geben müssen , um -csie auszuschalten.)
  3. Scrollen lessSie mit beliebigen Befehlen nach oben oder unten, damit die erste Zeile, die Sie kopieren möchten, auf dem Bildschirm angezeigt wird.
  4. Dreifach-Button1 Die von Ihnen gewählte Startlinie, um sie auszuwählen.
  5. Scrollen Sie nach unten, bis die letzte zu kopierende Zeile auf dem Bildschirm angezeigt wird. Sie müssen nur die Leertaste oder andere einfache Bildlauftasten verwenden, keine /Suche. Hier geht es lessdarum, alle Zeilen an das Terminal zu senden, damit sie kopiert werden können.
  6. Button3 in der ausgewählten Endzeile, um die Auswahl zu erweitern.

Mögliche Schwierigkeit: Ihr Scrollback-Puffer ist möglicherweise nicht groß genug. Das kann xtermmit der Option saveLinesresource oder -slcommand line geändert werden , aber ich kenne keine Möglichkeit, es in einem xterm zu ändern, der bereits ausgeführt wird.

Methode 2 - nicht mousey.

Verwenden Sie den |Befehl (Pipe) in less, um den Text an zu senden xclip.

Einzelheiten:

  1. Scrollen lessSie mit beliebigen Befehlen nach oben oder unten, um die letzte zu kopierende Zeile am oberen Bildschirmrand zu platzieren. Sie können diesen und den nächsten Schritt überspringen, wenn Sie bis zum Ende kopieren möchten.
  2. Verwenden Sie den mBefehl (Markieren), um eine Markierung an der von Ihnen gewählten Endposition zu setzen. Marken sind für sich genommen eine nützliche Funktion, und Sie sollten sie bereits kennen vi, aber nur für den Fall, dass Sie dies nicht tun: mxSetzen Sie eine Marke, bei der es xsich um einen beliebigen Buchstaben handeln kann, und 'xkehren Sie später dorthin zurück.
  3. Scrollen Sie nun nach oben, sodass sich die erste Zeile, die Sie kopieren möchten, oben auf dem Bildschirm befindet.
  4. Verwenden Sie den Befehl pipe: Damit |xwerden Sie aufgefordert, einen externen Befehl einzugeben. Das xsollte die gleiche Marke Brief, den Sie in dem verwendeten mBefehl, oder $für „ den ganzen Weg bis zum Ende“. Tippen Sie xclipdort.

Der einfache Fall des Kopierens der gesamten Manpage reduziert sich auf g|$xclipEnter.

Warnung (dh die schreckliche Sache, die mir gerade passiert ist ): Sie hat xclipeinen Hintergrund und wird als Teil der lessProzessgruppe ausgeführt. Wenn Sie versuchen, den Vorgang anzuhalten less, starten Sie einen anderen Auftrag auf demselben Terminal und fügen Sie ihn ein. Dies funktioniert nicht. Wenn Sie dann später den man/ lessjob in den Vordergrund stellen , kommt die Paste plötzlich durch. Ich denke, das sollte als xclipFehler angesehen werden ...


2
Mac-Benutzer können pbcopy verwenden, wenn xclip nicht installiert ist.
Mike Hedman

3

Terminal-Multiplexer mögen tmuxoder haben screennormalerweise eine Funktion wie diese (dh einen Teil des Scrollback-Puffers in eine Datei zu speichern oder an einen Befehl weiterzuleiten). Die Verwendung dieser Funktionen ist normalerweise eine gute Idee. Vielleicht möchten Sie sich eine davon ansehen .


2

Wie auf Nixcraft umrissen :

  1. Erhalten Sie xclip:

    sudo apt-get install xclip 
    

    oder

    yum install xclip
    

    auf einem RPM-basierten System.

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+ Vnach Herzenslust. Sie können die -selection clipboardAuswahl zum Einfügen stattdessen durch Klicken mit der mittleren Maustaste entfernen (als primäre Auswahl bezeichnet).

Beachten Sie, dass dies your_magic_hereein Platzhalter für einen Textfilter ( sed/ awk/ perl/ ...) ist, der den gewünschten Teil der Manpage entsprechend Ihrem spezifischen Anwendungsfall auswählt, den Sie nicht beschrieben haben. Ich fürchte, ich kann nicht spezifisch sein mit einem Beispiel.


Davon abgesehen xclipgibt es auch xsel(und andere). Vielleicht möchten Sie auch einen Blick auf diese Diskussion in der Zwischenablage werfen .
Peterph

Gibt es eine Möglichkeit, dies mit der Maus zu tun? Wenn die Maus das Ende der Seite erreicht, wird die Seite gescrollt.
Muhammad Gelbana

0

Dies hängt von Ihrem Terminalprogramm ab, aber die meisten Terminalprogramme verfügen nicht über die Funktionalität zum Speichern des ausgewählten Texts.

LXTerminal, uxterm, Konsole und GNOME Terminal scheinen alle diese 'Funktion' nicht zu haben, aber es könnte andere geben, die das haben. Schauen Sie sich die Menüstruktur Ihres Terminalprogramms an und es könnte etwas wie "Ausgewählte speichern" geben.


0

Vorausgesetzt, Sie verwenden gnome-terminalund lessals Pager für manSie können:

  • Führen Sie lessfür manmit -XSchlüssel zu deaktivieren alternativen Bildschirm, zum Beispiel:LESS=-X man less

Dies ermöglicht das Anhängen der Ausgabe an den Protokollpuffer des manTerminalemulators. In dieser Antwort finden Sie weitere Informationen unter /unix//a/38638/87918 .

  • Blättern Sie zur letzten Textseite, die Sie kopieren möchten. (Der gesamte gescrollte Text wird beim Scrollen im Verlaufspuffer gespeichert.)
  • Markieren Sie den Text mit der Maus gnome-terminalvon der letzten bis zur ersten Seite und ziehen Sie die Maus zum oberen Fensterrand. Der detaillierte Prozess der Textauswahl wird hier beschrieben :

Dies funktioniert in Gnome Terminal nicht. Stattdessen müssen Sie die Auswahl mit der linken Maustaste starten und dabei den Mauszeiger an den Rand des Fensters (oder außerhalb des Fensters) ziehen. GT scrollt die Dinge für Sie und erweitert dabei die Auswahl. Das Scrollen von GT ist so schnell, dass dies ein einigermaßen praktischer und intuitiver Vorgang ist, der wohl besser ist als der von xterm.

  • Jetzt haben Sie Text ausgewählt (welche Seiten auch immer Sie möchten), den Sie kopieren und einfügen können, wo immer Sie möchten.

0

Verwenden Sie die | (Pipe-) Befehl in weniger mit Markierungen, wie von Wumpus Q. Wumbley in seiner zweiten Option beantwortet , aber mit tee umgeleitet, um zu diesem Zweck an eine bereits vorhandene Datei anzuhängen:

|tee >> ~/helpaggregator.txt

Ich schlage eine vorhandene Datei vor, wie man sie normalerweise beim Erlernen neuer Befehle konsultieren muss, und man möchte sie konsolidieren. Darüber hinaus ist das Ausfüllen von Registerkarten praktisch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.