Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/06/2022, à 09:15

gperrot

Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Bonjour,

Je fais régulièrement des "copier-coller" de contenu de fichiers texte d'une fenêtre Terminal à une autre fenêtre Terminal où j'ai un vim du fichier destination.

Quand le "copier" concerne une ligne qui s'affiche en plusieurs lignes car plus longue que la largeur de la fenêtre, le "coller" insère des retours à la ligne dans la fenêtre destination ce qui m'oblige à retirer les retours à la ligne ensuite. Comment éviter cela ?

Merci d'avance pour votre aide.

Gilper


____________________________________________________________________________
Ubuntu 22.04.3 LTS 64 bits sur ASUS VivoBook S14

Hors ligne

#2 Le 09/06/2022, à 11:20

Sciensous

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

salut, même question avec nano smile
désolé: je n'apporte pas de réponse


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#3 Le 09/06/2022, à 13:19

MicP

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Bonjour

gperrot a écrit :

…le "coller" insère des retours à la ligne …

Mauvaise analyse : ce qui est collé est exactement ce qui a été copié.

Le collage n'a rien inséré de plus dans ce qui avait été copié <=> les retours à la ligne étaient déjà dans la sélection copiée :

gperrot a écrit :

… Quand le "copier" concerne une ligne qui s'affiche en plusieurs lignes

Il faut donc s'arranger pour qu'il n'y ait pas ces retours à la ligne avant de sélectionner le texte à copier/coller.

Dernière modification par MicP (Le 09/06/2022, à 18:25)

Hors ligne

#4 Le 09/06/2022, à 13:32

Watael

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

gperrot a écrit :

Bonjour,

Je fais régulièrement des "copier-coller" de contenu de fichiers texte d'une fenêtre Terminal à une autre fenêtre Terminal où j'ai un vim du fichier destination.

Quand le "copier" concerne une ligne qui s'affiche en plusieurs lignes car plus longue que la largeur de la fenêtre, le "coller" insère des retours à la ligne dans la fenêtre destination ce qui m'oblige à retirer les retours à la ligne ensuite. Comment éviter cela ?

apprends à te servir de la ligne de commande : utilise une redirection !
ou, apprends à te servir de vim et de son terminal...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 09/06/2022, à 16:07

DonutMan75

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Bonjour,

Je propose une solution alternative qui utilise la commande :r de vim.

Quelques exemples :

$ vim essai.txt

la commande :r toto va insérer le contenu du fichier toto dans le fichier essai.txt

la commande :r !commande va insérer le retour de la commande bash "commande" dans le fichier essai.txt

Par exemple : :r !date insère chez moi "jeudi 9 juin 2022, 16:01:43 (UTC+0200)"
Ou alors :r !ls *txt pour insérer l'ensemble des fichiers .txt du répertoire courant

Je ne sais pas si ça permet de faire avancer le schmilblick

A bientôt,

D.

Dernière modification par DonutMan75 (Le 11/06/2022, à 11:12)

Hors ligne

#6 Le 09/06/2022, à 16:28

Watael

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

c'est une bonne idée.

tu as oublié un point d'exclamation devant ls.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 10/06/2022, à 07:36

serged

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Sinon, à l'intérieur de vim dd coupe la ligne courante (xdd si on veut couper x lignes) et p la restaure au point d'insertion...


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#8 Le 11/06/2022, à 11:13

DonutMan75

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Watael a écrit :

tu as oublié un point d'exclamation devant ls.

Oui bien vu, je viens de le corriger.

Hors ligne

#9 Le 15/06/2022, à 16:23

gperrot

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Merci à tous pour vos solutions de contournement ! MicP, tu disais "Il faut donc s'arranger pour qu'il n'y ait pas ces retours à la ligne avant de sélectionner le texte à copier/coller". Que suggères-tu pour cela ?

Merci d'avance.


____________________________________________________________________________
Ubuntu 22.04.3 LTS 64 bits sur ASUS VivoBook S14

Hors ligne

#10 Le 15/06/2022, à 17:25

MicP

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

gperrot a écrit :

… MicP, tu disais "Il faut donc s'arranger pour qu'il n'y ait pas ces retours à la ligne avant de sélectionner le texte à copier/coller". Que suggères-tu pour cela ? …

Ne connaissant pas l'application qui fait s'afficher le texte dont tu voudrais pouvoir copier/coller une ligne,
je ne pouvais être plus précis.

Quelques méthodes (redirection, plusieurs commandes dans vim …) ont déjà été proposées,
et tu vois qu'elles sont très différentes les unes des autres.

Dis nous pourquoi les méthodes qui t'ont été proposées ne conviennent pas dans ton cas,
et quel programme ou/et ligne de commande(s) fait s'afficher la ligne que tu voudrais copier.

Dernière modification par MicP (Le 15/06/2022, à 17:29)

Hors ligne

#11 Le 15/06/2022, à 17:32

gperrot

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Les solutions proposées sont très bien mais sont des solutions de contournement qui demandent des étapes intermédiaires dans mon cas (extraction d'une ligne d'un fichier de plusieurs lignes dans un fichier ou dd/p à plusieurs reprises). Dans mon cas, le programme d'affichage de la ligne est une fenêtre Terminal avec un "more <fichier.txt>" avec <fichier.txt> contenant plusieurs lignes longues qu'on ne peut donc afficher en intégralité dans la fenêtre Terminal. Je veux copier une seule ligne de ce fichier qui s'affiche en N lignes à cause de sa longueur et la coller directement dans un vim dans une autre fenêtre.
Je ne sais pas si j'ai été assez clair mais si ce n'est pas le cas, je peux essayer de reformuler.

Merci d'avance pour votre aide.


____________________________________________________________________________
Ubuntu 22.04.3 LTS 64 bits sur ASUS VivoBook S14

Hors ligne

#12 Le 15/06/2022, à 17:55

Watael

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

pour moi, c'est toi qui cherche un contournement.

dans vim, avec ton fichier ouvert :
- tu ouvres le terminal vim : :ter
- tu exécutes la commande qui affiche les information voulues
- tu passes en "mode sélection" : Ctrl-w N
- tu copies : yy
- tu sors du "mode sélection" : i
- tu fermes le terminal vim : Ctrl-d
- tu colles dans ton fichier ouvert dans vim : p

vim est bien plus qu'un éditeur de texte.

Dernière modification par Watael (Le 15/06/2022, à 19:19)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 15/06/2022, à 17:58

diesel

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Ben..., dans le cas de texte long  affiché à l'écran dans une fenêtre du terminal, c'est l'application "terminal" qui ajoute les sauts de ligne pour gérer son affichage indépendamment de l'application qui a produit ces lignes (un "more" dans ton cas).

Donc, dans ton cas, il faudrait pouvoir dire à l'application "terminal" de ne pas introduire ces sauts de ligne à l'affichage, ce qui me paraît difficilement possible puisque l'application "terminal" ne sait pas si un saut de ligne donné a été volontairement généré par l'application qui a produit les lignes ou si c'est un saut de ligne nécessaire pour ne pas déborder.

Après, une fois que les sauts de lignes sont affichés et passés dans le presse papier par un ctrl-C, ben..., on ne peut plus trier non plus avant le ctrl-V.

vim permet de travailler sur un fichier texte. La bonne solution, c'est de trouver une commande qui te permet de faire passer directement la ligne qui t'intéresse du fichier source vers le fichier destination sans passer par l'affichage du terminal, puis d'éditer éventuellement le fichier destination.

Par exemple, si ta ligne source contient elle seule la chaîne de caractères "toto123" dans le fichier source et que tu veux la mettre à la fin de ton fichier destination, un simple : "grep "toto123" fichier_source >>fichier_destination" marchera exceptionnellement bien sans te rajouter le moindre saut de ligne intempestif.

C'est un exemple. Pour d'autres besoins, on peut toujours trouver une commande un peu différente qui donnera le bon résultat.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 15/06/2022, à 18:00)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#14 Le 15/06/2022, à 18:17

MicP

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

J'ai deux fichiers texte : fichCible.txt et fichLignesTropLongues.txt

j'ouvre le fichier nommé fichCible.txt avec la commande vim

vim fichCible.txt

depuis cette fenêtre de vim, et en mode commande,
j'entre ce qui suit :

:new fichLignesTropLongues.txt

et j'ai maintenant le contenu de fichCible.txt qui est affiché dans la moitié basse de la fenêtre de vim
et le contenu de fichLignesTropLongues.txt qui s'affiche dans la moitié haute de la fenêtre de vim

Le curseur clignotant est dans la moitié haute de la fenêtre de vim
je peux déplacer mon curseur sur un caractère contenu dans la ligne trop longue que je veux copier
et, toujours en mode commande, je copie la ligne
en tapant ce qui suit :

yy

puis, pour aller dans la moitié basse de la fenêtre de vim qui affiche le texte contenu dans le fichier fichCible.txt
je tape le raccourci clavier : Ctrl+w et de suite après sur la touche W

Toujours en mode commande, je déplace le curseur sur un caractère de la ligne après laquelle je veux coller la ligne copiée,
et je colle la ligne en tapant :

p

La longue ligne copiée a été collée sans qu'aucun retour à la ligne n'y ait été ajouté.

Dernière modification par MicP (Le 15/06/2022, à 19:10)

Hors ligne

#15 Le 15/06/2022, à 21:30

diesel

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Effectivement, y a plein de solutions.

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#16 Le 16/06/2022, à 11:36

MicP

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Bonjour

Si besoin :

Apprendre vim en 2 minutes (vidéo 1mn40s)

VIM Modes transitions diagram (pdf 203Ko)

Hors ligne

#17 Le 16/06/2022, à 15:15

Watael

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

"Apprendre vim en 2mn", me paraît un tout petit peu irréaliste. lol

quand on débute vim, il y a deux commandes essentielles :
:help
et
:quit


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#18 Le 16/06/2022, à 16:41

MicP

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

… "Apprendre vim en 2mn", me paraît un tout petit peu irréaliste …

Il suffit simplement de lancer la vidéo et de faire les manipulations proposées en temps réel, et en deux minutes, c'est tout. Voilà voilà ! smile

(avec le débit qu'il a dans la vidéo, il faudrait être un chihuahua cocaïnomane* pour arriver à le suivre.)
* expression volée à P. Desproges : "… plus gesticulant qu'un chihuahua cocaïnomane …" (il parlait de l'émission de Cyril Hanouna)

=======

Watael a écrit :

…quand on débute vim, …

on peut aussi entrer dans une fenêtre de terminal
la ligne de commande suivante :

vimtutor

Dernière modification par MicP (Le 17/06/2022, à 21:46)

Hors ligne

#19 Le 25/06/2022, à 20:46

noje

Re : Copier/coller 1 longue igne d'une fenêtre Terminal à une autre (vim) ?

Je lis avec pas mal de retard ce post, il existe des solutions plus simples il me semble, après comme toujours, chacun voit midi à sa porte (la magie des alternatives, sous linux).

Xclip en mode graphique pour copier des lignes de code de n'importe vers n'importe ou, pourvu que les outils soient lancés dans la couche graphique et utilise le clipboard (presse-papier).

En incluant ceci dans la config de vim pour copier et coller (standard yy et p)  :

set clipboard=unnamedplus "

https://doc.ubuntu-fr.org/xclip



Personnellement j'utilise Tmux qui permet de faire ceci même s'il ajoute des couches de manipulation, très pratique, surtout quand en pure console, comme ça m'arrive souvent (sans couche graphique).
(par défaut le schéma de raccourcis est basé sur Emacs).

Si vous êtes adepte de Vim la config qui va bien :

#vi copy mode 
bind Space copy-mode # Space = copy mode
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind P paste-buffer 

ctrl+b+espace  (passage en mode copie)
déplacement normal vi  (hjkl) (w b) (0 $)
quand vous êtes devant le texte v (visual)
déplacement pour faire votre sélection, puis retour pour copier
ctrl + b + P (P majuscule) copie la ligne.

Tmux est un multiplexeur de terminaux, outil permettant d'exploiter plusieurs terminaux au sein d'un seul et même affichage.
Ce qui apporte aussi des avantages, d'avoir plusieurs terminaux pouvoir splitter une fenêtre en deux...

https://doc.ubuntu-fr.org/tmux

Dernière modification par noje (Le 25/06/2022, à 20:51)


- LTS 18.04 & 22.04 - jwm - cwm - zsh

Les seules vraies erreurs sont celles que nous commettons à répétition.
Les autres sont des occasions d'apprentissage. (Dalaï Lama)

Hors ligne