52 votes

Windows Subsystem Linux - Faire en sorte que VIM utilise le presse-papiers ?

Pour clarifier les choses dès maintenant et éviter toute confusion ... Ceci concerne Linux qui fonctionne sous Windows 10 (Ubuntu), également connu sous le nom de WSL. Ce n'est pas la même chose que cygwin et Windows ou Linux autonome. C'est une bête à part.

Donc, s'il vous plaît gardez cela à l'esprit avant de me renvoyer à tous les articles que j'ai déjà lus ou de commenter que cela a déjà été demandé auparavant.

Est-ce que quelqu'un sait comment faire fonctionner la copie et le collage à partir du presse-papiers Windows OU de l'émulation Linux Ubuntu WSL? J'utilise clipboard=unnamedplus. Ça ne fonctionne pas, peu importe les combinaisons que j'essaie comme yy, "+yy, etc.

Oui, c'est vim-gtk avec le support +xterm_clipboard.

35voto

AntonOfTheWoods Points 483

(Edit : Oct 2020) Pour le presse-papiers bidirectionnel sur neovim, j'ai utilisé win32yank depuis plusieurs mois sans aucun problème. Placez win32yank.exe quelque part dans votre chemin d'accès sur Linux (n'importe où devrait aller), et ajoutez ce qui suit à votre init.vim.

set clipboard+=unnamedplus
let g:clipboard = {
          \   'name': 'win32yank-wsl',
          \   'copy': {
          \      '+': 'win32yank.exe -i --crlf',
          \      '*': 'win32yank.exe -i --crlf',
          \    },
          \   'paste': {
          \      '+': 'win32yank.exe -o --lf',
          \      '*': 'win32yank.exe -o --lf',
          \   },
          \   'cache_enabled': 0,
          \ }

(Réponse originale) Si vous voulez simplement copier de VIM à Windows, pour WSL2 et Ubuntu 20.04, cette réponse sur Reddit a parfaitement fonctionné pour moi avec VIM standard et Ubuntu WSL2 standard.

Ajoutez ce qui suit dans votre .vimrc (en bas, par exemple) :

" Prise en charge du copier-coller WSL
let s:clip = '/mnt/c/Windows/System32/clip.exe'  " changez ce chemin en fonction de votre point de montage
if executable(s:clip)
    augroup WSLYank
        autocmd!
        autocmd TextYankPost * if v:event.operator ==# 'y' | call system(s:clip, @0) | endif
    augroup END
endif

21voto

Aerows Points 311

Cette solution a fonctionné pour moi, grâce à l'utilisateur github robbiev.

Pour information, voici un extrait de sa réponse :

  1. Installer VcXsrv (si cela démarre après l'installation, arrêtez-le).

  2. Démarrez-le en utilisant le programme récemment installé XLaunch (recherchez-le dans le menu Démarrer).

  3. Utilisez toutes les options par défaut, et assurez-vous que les options du presse-papiers sont cochées.

  4. À la fin, enregistrez la configuration dans un fichier, config.xlaunch (utilisez-le pour le démarrer à partir de maintenant).

  5. Placez export DISPLAY=localhost:0.0 dans votre .bashrc dans Bash pour Windows et exécutez source ~/.bashrc dans un terminal ouvert.

  6. Assurez-vous que vim est installé avec le support du presse-papiers. vim --version | grep clipboard devrait afficher +clipboard, pas -clipboard. De plus, si vous exécutez la commande ex :echo has('clipboard') dans vim et qu'elle affiche 0, cela signifie qu'il n'a pas le support du presse-papiers compilé.

  7. Si vous n'avez pas le support du presse-papiers, installez un package vim compilé avec le support du presse-papiers, par exemple apt-get install vim-gtk.

  8. Maintenant, vous pouvez accéder au presse-papiers du système Windows via "*p et "*y, ou le définir par défaut en ajoutant set clipboard=unnamed dans votre fichier .vimrc.

Comme le mentionne robbiev, vous devriez maintenant également pouvoir utiliser le presse-papiers Windows à partir de machines distantes en utilisant le transfert X SSH.

11voto

user1039769 Points 225

Vous pouvez faire un clic droit sur le terminal puis dans la boîte d'options cocher CTRL + SHIFT + C/V pour les opérations de copier-coller à travers le terminal.

Terminal WSL Ubuntu

2voto

dwettstein Points 133

Si vous avez activé le Mode QuickEdit, vous pouvez simplement sélectionner le texte avec votre souris et faire un clic droit pour le copier dans le presse-papiers.

Pour activer le Mode QuickEdit, faites un clic droit sur la fenêtre de la console en haut et sélectionnez Propriétés (et/ou Défaut), puis cochez Mode QuickEdit.

EDIT: Out-of-the-box, il n'est pas possible de copier depuis VIM vers le presse-papiers de Windows pour le moment. Cependant, sur un problème GitHub au sein du dépôt WSL, certains ont apparemment trouvé un moyen de le faire en utilisant Xming ou VcXsrv respectivement : https://github.com/Microsoft/WSL/issues/892#issuecomment-275873108.

EDIT2: Un autre essai en utilisant .vimbuffer : https://stackoverflow.com/questions/44480829/how-to-copy-to-clipboard-in-vim-of-bash-on-windows

2voto

llinfeng Points 767

Une solution partielle grâce à ConEmu

Je ne sais pas pourquoi personne n'a mentionné ConEmu. Il peut au minimum gérer la moitié du problème du presse-papiers :

  • Pour coller des éléments du presse-papiers Windows dans WSL, un simple Ctrl + V fera l'affaire.

    • Un avantage est que : si l'on copie un chemin absolu dans Windows, en le collant dans ConEmu, c:/utilisateurs/nom sera transcrit en /mnt/c/utilisateurs/nom. Cela est exécutable nativement via WSL.
  • Pour copier depuis WSL, pour l'instant, je dois encore utiliser mon curseur maison. Cela fonctionne plus de 90% du temps.

Pour mon cas d'utilisation, je n'ai pas tendance à copier beaucoup depuis WSL ; et j'apprécie beaucoup l'aide au collage de ConEmu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X