locate ... | less
génère un long chemin, qui est représenté par plusieurs lignes dans le terminal, bien qu'il s'agisse en fait d'une seule ligne.
Je copie le chemin depuis le terminal en sélectionnant le texte avec la souris et en appuyant sur Ctrl+ Shift+ C. Lorsque je le colle dans un fichier texte, j'obtiens une ligne de changement indésirable dans le texte, exactement de la même manière qu'il est affiché dans le terminal.
Mais je me souviens que parfois je peux copier une sortie à long chemin par locate ... | less
, sans introduire de changement de ligne indésirable, et parfois je ne peux pas. Je ne sais pas si je fais quelque chose différemment.
Je me demande donc comment s'assurer que le problème ne se produira pas? Merci!
Mon OS: Ubuntu 12.04.
Mon terminal: Gnome Terminal 3.4.1.1
Réponses:
Au lieu de copier ce qui est affiché sur le terminal (uniquement ce qui tient à l'écran, avec), copiez le texte réel. Utilisez l'un des utilitaires externes xsel ou xclip (ils ont principalement les mêmes fonctionnalités, je vais utiliser xsel dans cette réponse) pour copier des données depuis ou vers le presse-papiers X. Pour copier dans le presse-papiers, passez le contenu souhaité sur l'entrée standard. Lors du collage à partir du presse-papiers, le contenu est écrit sur la sortie standard.
En moins, utilisez la
|
commande pour diriger un groupe de lignes via une commande. Faites défiler jusqu'à la première ligne sur laquelle vous souhaitez agir, tapezmm
pour définir une marque, faites défiler jusqu'à la dernière ligne, saisissez|mxsel -b
et appuyez sur Enter. Deux repères sont prédéfinis:^
pour le début du fichier,$
pour la fin du fichier. Ainsi, pour copier tout le fichier, utilisez<|$xsel -b
. Pour copier une seule ligne, utilisezmm|mxsel -b
et Enter.Supprimez l'
-b
option de copier dans la sélection principale au lieu du presse-papiers.la source
Le comportement réel de ceci est le suivant:
si vous êtes dedans
less
et que vous avez un fichier avec une très longue ligne, alors si vous faites défiler la longue ligne vers le bas et faites défiler vers le haut, vous avez plusieurs lignes, lors de la copie de tout le texte. Après cela, lorsque vous faites défiler les lignes fractionnées vers le bas sur le bas du terminal et faites à nouveau défiler les lignes, les sauts de ligne seront à nouveau supprimés.Pour la visualisation:
la source
Vous pouvez copier les lignes de sortie sans retour à la ligne supplémentaire ( saut de ligne) si le texte a été sorti directement sur le terminal.
Le terminal peut garder une trace de la fin de la ligne réelle.
Mais si les lignes ont été sorties par
less
ou unpager
programme similaire , le terminal ne sait pas où sont les sauts de ligne. Le téléavertisseur utilise le terminal comme un plein écran de caractères et indique au terminal de "mettre ces caractères là" et des opérations comme le défilement. Mais, pour le terminal, il n'y a aucun moyen de voir où les nouvelles lignes sont destinées.la source
locate <something> | less
dans deux cas différents.echo $LESS
, il y a peut-être des options intéressantes pour moins.)-S
mode, alors peut-être que cela aggrave aussi.Dans
less
, si vous sélectionnez plusieurs lignes de texte encapsulées, puis copiez-le, il apparaîtra sur une seule ligne.Si vous appuyez sur PgUppuis copiez le même texte, il apparaîtra sur plusieurs lignes.
PgDnc'est bien, les flèches vont bien. Mais PgUpprovoque la division du texte.
la source
Si le but est de copier-coller, j'utilise à la
cat
place deless
oumore
puis le terminal le capture tel qu'il est réellement plutôt que tel qu'il est affiché.la source