Comment copier du texte de plusieurs pages du terminal dans le presse-papiers?


13

Je regardais un homme page pour un logiciel sur ma machine et je besoin de copier-coller une partie de ce texte , mais le texte était beaucoup plus d'une page. Je sais que je peux diriger la sortie vers un fichier et utiliser un logiciel basé sur l'interface utilisateur tel que gedit pour copier le texte dont j'ai besoin. Mais cela peut-il se faire depuis le terminal?

Joseph a suggéré une méthode en ligne de commande (peu compliquée pour moi, je ne suis pas encore bon avec les expressions régulières sous Linux). Mais je me demande s'il existe un moyen de le faire pendant que je suis encore sur le terminal, en utilisant la souris .

J'espère avoir une réponse générique, cependant, j'utilise Ubuntu.

Réponses:


9

J'ai quelques idées imparfaites, mais peut-être utiles.

Méthode 1 - mousey.

Utilisez la barre de défilement du terminal.

Détails (en supposant que des xtermajustements seront nécessaires pour les autres terminaux.)

  1. Activez la barre de défilement si ce n'est pas déjà fait. (Dans xterm, c'est dans le menu que vous obtenez avec Ctrl + Button2.)
  2. Assurez-vous que lessne fonctionne pas avec l' -coption (j'ai cette option activée dans ma LESSvariable d'environnement, mais elle interfère avec ce que nous sommes sur le point de faire, donc je dois taper -cpour la désactiver.)
  3. En utilisant les lesscommandes que vous aimez, faites défiler vers le haut ou vers le bas pour que la première ligne que vous souhaitez copier soit visible à l'écran.
  4. triple-Button1 votre ligne de départ choisie pour la sélectionner.
  5. Faites défiler vers le bas jusqu'à ce que la dernière ligne que vous souhaitez copier soit visible à l'écran. Vous devez utiliser uniquement la barre d'espace ou d'autres touches de défilement simples, pas une /recherche - le but ici est d'obtenir lessd'envoyer toutes les lignes au terminal afin qu'elles puissent être copiées.
  6. Button3 sur la ligne de fin choisie pour étendre la sélection.

Problème possible: votre mémoire tampon de défilement n'est peut-être pas assez grande. Cela peut être modifié xtermavec l' option de saveLinesressource ou de -slligne de commande, mais je ne connais pas de moyen de le changer dans un xterm qui est déjà en cours d'exécution.

Méthode 2 - sans souris.

Utilisez la |commande (pipe) lesspour envoyer le texte à xclip.

Détails:

  1. En utilisant les lesscommandes que vous aimez, faites défiler vers le haut ou vers le bas pour positionner la dernière ligne que vous souhaitez copier en haut de l'écran. Vous pouvez ignorer cette étape et l'étape suivante si vous souhaitez copier jusqu'au bout.
  2. Utilisez la mcommande (marquer) pour définir une marque à la position finale choisie. Les marques sont une fonctionnalité utile en soi, et vous devriez déjà les connaître vi, mais au cas où vous ne le feriez pas: mxdéfinit une marque, où xpeut être n'importe quelle lettre, et 'xvous y renvoie plus tard.
  3. Faites maintenant défiler vers le haut de sorte que la première ligne que vous souhaitez copier se trouve en haut de l'écran.
  4. Utilisez la commande pipe: |xqui vous invitera à entrer une commande externe. La xdevrait être la même lettre de marque que vous avez utilisée dans la mcommande, ou $pour "tout le chemin jusqu'à la fin". Tapez xcliplà.

Le cas simple de copier la page de manuel entière se réduit à g|$xclipEnter.

Avertissement (c'est-à - dire la chose horrible qui vient de m'arriver ): xclipsera à demi-fond, fonctionnant dans le cadre du lessgroupe de processus. Si vous essayez de suspendre less, de démarrer un autre travail sur le même terminal et de le coller, cela ne fonctionnera pas. Ensuite, lorsque vous mettez en avant le travail man/ less, la pâte apparaît soudainement. Je pense que cela devrait être considéré comme un xclipbug ...


2
Les utilisateurs de Mac peuvent utiliser pbcopy s'ils n'ont pas installé xclip.
Mike Hedman

3

Le multiplexeur de terminaux comme tmuxou screengénéralement possède une fonctionnalité comme celle-ci (c'est-à-dire pour enregistrer une partie de la mémoire tampon de défilement dans un fichier ou la diriger vers une commande) et leur utilisation est généralement une bonne idée de toute façon, alors vous voudrez peut-être jeter un œil à l'une de ces .


2

Comme indiqué sur Nixcraft :

  1. Obtenez xclip:

    sudo apt-get install xclip 
    

    ou

    yum install xclip
    

    sur un système basé sur RPM.

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+ Vau contenu de votre cœur. Vous pouvez supprimer -selection clipboardpour choisir le collage par un clic central de la souris à la place (appelé sélection principale).

Notez qu'il your_magic_heres'agit d'un espace réservé pour un filtre de texte ( sed/ awk/ perl/ ...) qui sélectionne la partie souhaitée de la page de manuel en fonction de votre cas d'utilisation spécifique, que vous n'avez pas décrit, donc je crains de ne pas pouvoir être précis avec un exemple.


A part xclipil y en a aussi xsel(et d'autres). Vous pouvez également consulter cette discussion sur le presse - papiers .
peterph

Existe-t-il un moyen de le faire en utilisant la souris? De sorte que lorsque la souris atteint la fin de la page, la page défile.
Muhammad Gelbana

0

Cela dépend de votre programme de terminal, mais la plupart des programmes de terminal n'ont pas la fonctionnalité pour enregistrer le texte sélectionné.

LXTerminal, uxterm, Konsole et GNOME Terminal semblent tous manquer de cette «fonctionnalité», mais il pourrait y en avoir d'autres qui l'ont. Regardez la structure du menu de votre programme terminal et il pourrait y avoir quelque chose comme "Enregistrer la sélection"


0

En supposant que vous utilisiez gnome-terminalet lessque manvous utilisiez un téléavertisseur, vous pouvez:

  • Exécutez lesspour manavec la -Xtouche pour désactiver l'écran alternatif, par exemple:LESS=-X man less

Cela permettra d'ajouter la sortie de la manmémoire tampon de l'historique de l'émulateur de terminal. Voir cette réponse pour plus de détails /unix//a/38638/87918 .

  • Faites défiler jusqu'à la dernière page de texte que vous souhaitez copier. (Tout le texte défilé sera enregistré dans le tampon d'historique pendant le défilement)
  • Sélectionnez le texte avec la souris au gnome-terminaldébut de la dernière page à la première, en faisant glisser la souris vers le haut de la fenêtre. Le processus détaillé de sélection de texte est décrit ici :

Cela ne fonctionne pas dans Gnome Terminal. Au lieu de cela, vous devez commencer la sélection avec le bouton gauche de la souris et, tout en la faisant, faites glisser le curseur de la souris vers le bord de la fenêtre (ou à l'extérieur de la fenêtre). GT fera défiler les choses pour vous, étendant la sélection dans le processus. Le défilement de GT est suffisamment rapide pour qu'il s'agisse d'un processus raisonnablement pratique et intuitif, sans doute meilleur que celui de xterm.

  • Maintenant, vous avez sélectionné le texte (quelles que soient les pages que vous souhaitez) que vous pouvez copier et coller où vous le souhaitez.

0

Utilisez le | (pipe) commande en moins avec des marques comme l'a répondu Wumpus Q. Wumbley dans sa deuxième option , mais redirigeant en utilisant tee pour ajouter à un fichier existant déjà là dans le but:

|tee >> ~/helpaggregator.txt

Je suggère un fichier existant que l'on a généralement besoin de consulter lors de l'apprentissage de nouvelles commandes et que l'on aime les garder consolidés. De plus, la complétion des onglets est très pratique.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.