Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier du texte issu d'un vim ouvert sur une machine distante (qui ne possède pas de serveur X)

21 réponses
Avatar
Francois Lafont
Bonjour à tous,

Au quotidien, j'utilise Terminator et vim sur ma Debian Wheezy
avec grande satisfaction mais il y a quand même truc qui me gêne.
C'est quand je me connecte via ssh à une machine distante et que
j'ouvre un fichier texte via vim sur la machine distante. Là, j'ai
des difficultés si je veux copier le contenu du fichier dans le
presse-papier de ma machine locale.

En effet, si je veux copier un bout de texte (genre 2 lignes) pas
de souci. Avec ma souris je sélectionne les deux lignes et je peux
faire une copier/coller sur ma machine locale. En revanche, si je
veux copier tout le fichier (et que son contenu dépasse la taille
de la fenêtre de mon terminal), là je suis ennuyé car c'est
impossible avec la souris de scroller dans le vim de la machine
distante (sauf en activant :set mouse=a sur le vim distant mais
c'est voué à l'échec, cf plus bas).

Le seul moyen que j'ai trouvé c'est de quitter vim sur la machine
distante pour me retrouver dans un shell, faire un « cat le-fichier »
sur la machine distante et ensuite sélectionner avec la souris
l'ensemble de la sortie de la commande précédente. Ça marche car,
curieusement, autant je ne peux pas sélectionner du texte via un
scrolling de la souris dans un vim de la machine distante, autant
je peux le faire sur son shell de la machine distante (je ne sais
pas pourquoi, c'est une constatation). Cette solution n'est quand
même pas pratique car il faut que je remonte avec ma souris jusqu'au
« cat le-fichier » sans le dépasser (si jamais je peux remonter
jusqu'à lui dans mon terminal ce qui n'est pas forcément le cas si
le fichier est trop long).

Je précise que j'ai tenté le coup du :set mouse=a qui permet
effectivement de sélectionner du texte avec la souris dans vim
(en passant automatiquement en monde "VISUAL LINE" mais ce que je
sélectionne n'est pas « copiable » dans le presse-papier de ma machine
locale. Il n'y a *pas* de serveur X a priori sur la machine distante,
je ne veux pas en installer un, ni même installer vim-gtk etc. (donc
pas de solution à base de X svp). Hors de question de faire un scp entre
ma machine locale et la machine distante car parfois j'ai une petite
chaîne de ssh avant d'arriver sur la machine distante qui peut être sur
un réseau inaccessible à la machine locale (je n'ai pas envie de
m'amuser à monter un tunnel ssh).

Je me dis que la solution doit plutôt passer par une config au niveau
du terminal que j'utilise (Terminator donc) plutôt que par des options
de vim mais je me trompe peut-être. Je trouve que c'est quand même
curieux que je puisse sélectionner du texte avec un scrolling de la
souris quand je suis sur le shell de la machine distante mais que ça
devienne impossible quand j'y ouvre vim. J'ai constaté de visu que les
gens qui sont sous Mac n'ont ce souci (ils peuvent faire du scrolling
pour sélectionner du texte sans problème et a priori sans rien configurer
de particulier). J'avoue que je suis un peu jaloux. ;)

Merci pour votre aide.

--
François Lafont

10 réponses

1 2 3
Avatar
Thierry Houx
Le 05/12/2014 03:26, Francois Lafont a écrit :
Bonjour à tous,

Au quotidien, j'utilise Terminator et vim sur ma Debian Wheezy
avec grande satisfaction mais il y a quand même truc qui me gêne.
C'est quand je me connecte via ssh à une machine distante et que
j'ouvre un fichier texte via vim sur la machine distante. Là, j'ai
des difficultés si je veux copier le contenu du fichier dans le
presse-papier de ma machine locale.

En effet, si je veux copier un bout de texte (genre 2 lignes) pas
de souci. Avec ma souris je sélectionne les deux lignes et je peux
faire une copier/coller sur ma machine locale. En revanche, si je
veux copier tout le fichier (et que son contenu dépasse la taille
de la fenêtre de mon terminal), là je suis ennuyé car c'est
impossible avec la souris de scroller dans le vim de la machine
distante (sauf en activant :set mouse=a sur le vim distant mais
c'est voué à l'échec, cf plus bas).

Le seul moyen que j'ai trouvé c'est de quitter vim sur la machine
distante pour me retrouver dans un shell, faire un « cat le-fichier »
sur la machine distante et ensuite sélectionner avec la souris
l'ensemble de la sortie de la commande précédente. Ça marche car,
curieusement, autant je ne peux pas sélectionner du texte via un
scrolling de la souris dans un vim de la machine distante, autant
je peux le faire sur son shell de la machine distante (je ne sais
pas pourquoi, c'est une constatation). Cette solution n'est quand
même pas pratique car il faut que je remonte avec ma souris jusqu'au
« cat le-fichier » sans le dépasser (si jamais je peux remonter
jusqu'à lui dans mon terminal ce qui n'est pas forcément le cas si
le fichier est trop long).

Je précise que j'ai tenté le coup du :set mouse=a qui permet
effectivement de sélectionner du texte avec la souris dans vim
(en passant automatiquement en monde "VISUAL LINE" mais ce que je
sélectionne n'est pas « copiable » dans le presse-papier de ma machine
locale. Il n'y a *pas* de serveur X a priori sur la machine distante,
je ne veux pas en installer un, ni même installer vim-gtk etc. (donc
pas de solution à base de X svp). Hors de question de faire un scp entre
ma machine locale et la machine distante car parfois j'ai une petite
chaîne de ssh avant d'arriver sur la machine distante qui peut être sur
un réseau inaccessible à la machine locale (je n'ai pas envie de
m'amuser à monter un tunnel ssh).

Je me dis que la solution doit plutôt passer par une config au niveau
du terminal que j'utilise (Terminator donc) plutôt que par des options
de vim mais je me trompe peut-être. Je trouve que c'est quand même
curieux que je puisse sélectionner du texte avec un scrolling de la
souris quand je suis sur le shell de la machine distante mais que ça
devienne impossible quand j'y ouvre vim. J'ai constaté de visu que les
gens qui sont sous Mac n'ont ce souci (ils peuvent faire du scrolling
pour sélectionner du texte sans problème et a priori sans rien configurer
de particulier). J'avoue que je suis un peu jaloux. ;)

Merci pour votre aide.




Et le simple clic "bouton central" (roulette maintenant) une fois le
texte sélectionné ne fonctionne pas ?
Pour ma part, j'utilise Xterm ou Konsole.

Cordialement.
--
Thierry Houx ()
Tourisme en Haute-Normandie, informatique libre et généalogie:
http://thierry.houx.free.fr/index.html
Webmestre du site http://www.geneacaux.org/ membre CGPCSM N°72-2576
Avatar
Francois Lafont
Le 05/12/2014 05:58, Thierry Houx a écrit :

Et le simple clic "bouton central" (roulette maintenant) une fois le texte sélectionné ne fonctionne pas ?



Une fois le texte sélectionné si, mais justement mon problème c'est bien
de *sélectionner* le texte quand celui-ci dépasse la taille de mon
terminal. Si je dois sélectionner 2 lignes du fichier alors oui le bouton
central de la souris fonctionne... tout autant que le clic droit puis
"coller" dans le menu contextuel. Mais si je dois sélectionner le texte
que je vois sur mon terminal plus quelques ligne en dessous, ce qui nécessite
que je fasse du scrolling, alors là c'est juste impossible. J'ai beau
faire un scrolling vers le bas, ça ne bouge pas (quand je suis dans vim, ça
ne se produit pas quand je suis dans un shell par exemple). Dans vim (sur
la machine distante), la roulette fonctionne tant que je ne sélectionne pas
du texte. Dès que je sélectionne du texte, mon terminal se bloque à l'endroit
où je suis.

En gros, dans le processus "copier/coller", ce n'est pas la partie "coller"
qui me pose problème (cette partie là fonctionne très bien avec le "bouton
central" ou via une autre combinaison), c'est la partie "sélectionner-copier"
qui me pose problème.

Pour ma part, j'utilise Xterm ou Konsole.



Je viens de tester avec Xterm, j'ai le même problème (attention ma
machine distante est un serveur sur lequel il n'y a pas de serveur X
qui tourne, je pense que ce point est important).

--
François Lafont
Avatar
Pascal
Le 05/12/2014 06:29, Francois Lafont a écrit :
Le 05/12/2014 05:58, Thierry Houx a écrit :

Et le simple clic "bouton central" (roulette maintenant) une fois le texte sélectionné ne fonctionne pas ?



Une fois le texte sélectionné si, mais justement mon problème c'est bien
de *sélectionner* le texte quand celui-ci dépasse la taille de mon
terminal. Si je dois sélectionner 2 lignes du fichier alors oui le bouton
central de la souris fonctionne... tout autant que le clic droit puis
"coller" dans le menu contextuel. Mais si je dois sélectionner le texte
que je vois sur mon terminal plus quelques ligne en dessous, ce qui nécessite
que je fasse du scrolling, alors là c'est juste impossible. J'ai beau
faire un scrolling vers le bas, ça ne bouge pas (quand je suis dans vim, ça
ne se produit pas quand je suis dans un shell par exemple). Dans vim (sur
la machine distante), la roulette fonctionne tant que je ne sélectionne pas
du texte. Dès que je sélectionne du texte, mon terminal se bloque à l'endroit
où je suis.

En gros, dans le processus "copier/coller", ce n'est pas la partie "coller"
qui me pose problème (cette partie là fonctionne très bien avec le "bouton
central" ou via une autre combinaison), c'est la partie "sélectionner-copier"
qui me pose problème.

Pour ma part, j'utilise Xterm ou Konsole.



Je viens de tester avec Xterm, j'ai le même problème (attention ma
machine distante est un serveur sur lequel il n'y a pas de serveur X
qui tourne, je pense que ce point est important).



Bonjour ,
je n'utilise pas vim mais j'ai vu ça sur le net :
http://vim.wikia.com/wiki/Copy_an_Entire_Buffer_to_the_Clipboard
Avatar
Francois Lafont
Le 05/12/2014 07:17, Pascal a écrit :

je n'utilise pas vim mais j'ai vu ça sur le net :
http://vim.wikia.com/wiki/Copy_an_Entire_Buffer_to_the_Clipboard



Les commandes "+y et "*y (que je connaissais déjà) ne fonctionnent pas.
Elles sont très pratiques pour copier une sélection vim dans le clipboard
afin de recopier le texte sur une autre application que vim mais chez moi
ça ne marche qu'en local (ie le vim est local et je fais une copie vers
une appli locale également). Je pense que ces commandes supposent également
qu'un serveur X est installé sur le système.

Merci quand même pour la tentative. ;)

--
François Lafont
Avatar
Damien Wyart
* Francois Lafont
in fr.comp.os.linux.configuration:
Il n'y a *pas* de serveur X a priori sur la machine distante, je ne
veux pas en installer un, ni même installer vim-gtk etc. (donc pas de
solution à base de X svp). Hors de question de faire un scp entre ma
machine locale et la machine distante car parfois j'ai une petite
chaîne de ssh avant d'arriver sur la machine distante qui peut être
sur un réseau inaccessible à la machine locale (je n'ai pas envie de
m'amuser à monter un tunnel ssh).



Avec ces limitations (pas de X distant ni de tunnel SSH de bout en
bout), je pense que tu ne pourras pas faire grand chose.

J'ai en tête des choses comme :

cat file.txt | xclip -i # à taper sur la machine distant et le
# X11Forwarding va fait que xclip aura accès à ton X11 local

un montage en SSHfs (http://fuse.sourceforge.net/sshfs.html)

ssh machinedistante "<file.txt" | xsel --clipboard --input

ou équivalent :

ssh machinedistante "<file.txt" | xclip -selection clipboard

mais sans X (pour la première solution) ni un tunnel, ça ne fonctionnera pas.

Sinon, si tu utilises screen ou tmux, tu peux avoir un "onglet" distant
dans lequel tu copies et un onglet local dans lequel tu colles.
http://web.mit.edu/gnu/doc/html/screen_11.html
https://awhan.wordpress.com/2010/06/20/copy-paste-in-tmux/
http://cheat.errtheblog.com/s/tmux

--
DW
Avatar
Francois Lafont
Le 05/12/2014 07:36, Damien Wyart a écrit :
* Francois Lafont
in fr.comp.os.linux.configuration:
Il n'y a *pas* de serveur X a priori sur la machine distante, je ne
veux pas en installer un, ni même installer vim-gtk etc. (donc pas de
solution à base de X svp). Hors de question de faire un scp entre ma
machine locale et la machine distante car parfois j'ai une petite
chaîne de ssh avant d'arriver sur la machine distante qui peut être
sur un réseau inaccessible à la machine locale (je n'ai pas envie de
m'amuser à monter un tunnel ssh).



Avec ces limitations (pas de X distant ni de tunnel SSH de bout en
bout), je pense que tu ne pourras pas faire grand chose.

J'ai en tête des choses comme :

cat file.txt | xclip -i # à taper sur la machine distant et le
# X11Forwarding va fait que xclip aura accès à ton X11 local

un montage en SSHfs (http://fuse.sourceforge.net/sshfs.html)

ssh machinedistante "<file.txt" | xsel --clipboard --input

ou équivalent :

ssh machinedistante "<file.txt" | xclip -selection clipboard

mais sans X (pour la première solution) ni un tunnel, ça ne fonctionnera pas.



C'est fou ça, mais il me semble bien avoir vu des collègues
sous MacOS faire le copier-coller les doigts dans le pif sans
rien paramétrer... et vas-y que je te fais le scroll comme si
de rien n'était. Perso, je me dis que c'est une propriété qui
viendrait du terminal (pas de vim). Le scrolling est bien
possible tant que je ne fais pas de la sélection de texte. Je
comprends pas trop pourquoi, sous prétexte que je fais une
sélection de texte en laissant le bouton gauche de ma souris
enfoncé, le scrolling deviendrait tout à coup une impossibilité
technique, non ?

Bon, ceci étant ça me met le doute tout ça. Dès que j'ai un
"Maceux" sous la main je le chope pour faire le test. :)

Sinon, si tu utilises screen ou tmux, tu peux avoir un "onglet" distant
dans lequel tu copies et un onglet local dans lequel tu colles.
http://web.mit.edu/gnu/doc/html/screen_11.html
https://awhan.wordpress.com/2010/06/20/copy-paste-in-tmux/
http://cheat.errtheblog.com/s/tmux



Je ne connaissais pas tout ça. Je vais voir... Mais quand même,
tout ça me semble bien compliqué pour au final faire une truc
« con comme la lune ». ;)

Merci de ton aide.

--
François Lafont
Avatar
Michel
Le 05/12/2014 07:29, Francois Lafont a écrit :
Le 05/12/2014 07:17, Pascal a écrit :

je n'utilise pas vim mais j'ai vu ça sur le net :
http://vim.wikia.com/wiki/Copy_an_Entire_Buffer_to_the_Clipboard



Les commandes "+y et "*y (que je connaissais déjà) ne fonctionnent pas.
Elles sont très pratiques pour copier une sélection vim dans le clipboard
afin de recopier le texte sur une autre application que vim mais chez moi
ça ne marche qu'en local (ie le vim est local et je fais une copie vers
une appli locale également). Je pense que ces commandes supposent également
qu'un serveur X est installé sur le système.

Merci quand même pour la tentative. ;)



Bonjour,

Dans ton cas précis je ne suis pas sûr du résultat, mais essaye de
sélectionner les premiers caractères du texte à copier, puis scrolle et
en shiftant, sélectionne les derniers.
Ça fonctionne sur certains terminaux, rien de certain dans ton cas .

Cordialement
Michel
Avatar
Damien Wyart
* Francois Lafont
in fr.comp.os.linux.configuration:
C'est fou ça, mais il me semble bien avoir vu des collègues sous MacOS
faire le copier-coller les doigts dans le pif sans rien paramétrer...
et vas-y que je te fais le scroll comme si de rien n'était. Perso, je
me dis que c'est une propriété qui viendrait du terminal (pas de vim).



En effet, on trouve des choses comme ceci :

http://stackoverflow.com/questions/1727261/scrolling-inside-vim-in-macs-terminal
http://superuser.com/questions/98350/vim-and-mouse-with-ssh-from-mac-to-linux

Et il faut en effet que le terminal local soit suffisemment "compatible"
(genre iTerm ou Term+Mouseterm) et que le vim distant soit dans le bon
mode de terminal.

Je ne connais pas Terminator en détail, regardes si on peut le
configurer pour qu'il se comporte comme un xterm, et essaie aussi dans
le vim distant :

:set term=xterm

Tu as sans doute raison qu'il y a un problème de ce côté dans ta config.
Tu ne positionne pas TERM à la main dans tes fichiers de démarrage du
shell ?

Sinon, pour le sujet des tunnels, si ce qui te gêne c'est la lourdeur,
tu as des outils pour automatiser, comme Belier par exemple
(http://www.ohmytux.com/belier/).

--
DW
Avatar
Nicolas George
Francois Lafont , dans le message
<548150bc$0$22052$, a écrit :
Je pense que ces commandes supposent également
qu'un serveur X est installé sur le système.



Tu sembles avoir oublié la signification du mot serveur dans « serveur X ».
Avatar
Francois Lafont
Le 05/12/2014 08:27, Michel a écrit :

Dans ton cas précis je ne suis pas sûr du résultat, mais essaye de
sélectionner les premiers caractères du texte à copier, puis scrolle et
en shiftant, sélectionne les derniers.
Ça fonctionne sur certains terminaux, rien de certain dans ton cas .



Pas mieux hélas.

En fait, pour être précis, je ne peux plus scroller du tout avec la roulette
de ma souris dès que je laisse le bouton gauche de ma souris enfoncé (quand
je suis sous vim hein, pas sur le shell par exemple où ça marche impeccable,
va comprendre). Donc sous vim, si je n'appuie pas sur le bouton gauche de la
souris je peux scroller avec la roulette et si je laisse appuyer sur le bouton
c'est plus possible.

--
François Lafont
1 2 3