Existe-t-il un moyen de copier un bloc de texte dans le presse-papiers du système, afin que je puisse le coller dans un autre programme?

Commentaires

  • Cela a déjà été demandé et répondu sur SO. Vous pouvez trouver des informations plus et différentes ici.
  • Jutilise ce plugin sur macvim christoomey / vim-system-copy et je ladore vraiment. Cela fonctionne très bien avec les mouvements cpip, cpi{.
  • Ce dont vous avez vraiment besoin, cest de EasyClip . Il fera juste cela et bien plus encore …
  • Je ne peux pas ajouter de réponse mais un commentaire. Si vous souhaitez uniquement copier un texte, vous pouvez également utiliser sed :). sed -n 5p file; seulement 5ème ligne. sed -n -e 5p -e 8p file; seulement 5e et 6e lignes. sed -n 5,8p file; lignes entre le 5e et le 8e. Il imprimera les lignes dans la console. Vous pouvez facilement copier en sélectionnant du texte.

Réponse

Pour X11 (cest-à-dire. Linux et la plupart des autres UNIX -like systèmes) il y a deux presse-papiers qui sont indépendants lun de lautre:

  • PRIMAIRE – Ceci est copié lors de la sélection et peut être collé avec le bouton central de la souris.
  • CLIPBOARD – Il est copié avec (généralement) ^C, et collé avec ^V (Cest comme MS Windows).

OS X et les systèmes Windows nont quun seul presse-papiers.

Pour X11 systèmes, il existe également un certain nombre doutils qui synchronisent ces presse-papiers pour vous; donc sils semblent identiques, vous pouvez en avoir un en cours dexécution.

Vim a deux regis spéciaux tres correspondant à ces presse-papiers:

  • * utilise PRIMARY; mnémonique: S tar is S elect (for copy-on- s elect)
  • + utilise CLIPBOARD; mnémonique: CTRL PLUS C (pour la combinaison de touches commune)

Sous Windows & OS X il ny a pas de différence entre + et *, car ces systèmes nont quun seul presse-papiers, et les deux registres font référence à la même chose (peu importe celui que vous utilisez).

Vous pouvez utiliser ces registres comme nimporte quel registre. Par exemple, en utilisant le presse-papiers PRIMAIRE * avec les commandes y et p:

  • "*yy
  • "*p

Vous pourriez peut-être utiliser ceci comme raccourcis clavier plus pratiques:

noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p 

Si vous souhaitez  » automatiquement  » interface avec le système « s presse-papiers au lieu de sy référer manuellement tout le temps, vous pouvez définir la variable clipboard:

  • Réglez-le sur unnamed pour utiliser * (PRIMAIRE, sur sélection)
  • Réglez-le sur unnamedplus pour utiliser + (CLIPBOARD, ^C)

Désormais, le simple fait dutiliser yy ira dans le presse-papiers du système, au lieu du registre sans nom de Vim, et p collera le système « s presse-papiers.

Vous pouvez également attribuer à ces registres comme nimporte quel registre avec let:

  • :let @+=42
  • :let @*=42

Le clipboard le paramètre a quelques options supplémentaires (telles que les filtres dexclusion); mais ce sont les bases. Voir :help "clipboard" pour toute lhistoire 😉

gVim

Si vous utilisez gVim, vous pouvez obtenir un comportement de copie lors de la sélection lorsque en utilisant :set guioptions+=a.
Ceci est activé par défaut sur les systèmes X11 (copies vers PRIMARY), mais pas sur MS Windows & OSX (car la sélection de nimporte quel texte remplacerait votre presse-papiers).

Non +clipboard?

Vim requiert le +clipboard indicateur de fonctionnalité pour que tout cela fonctionne; vous pouvez vérifier si votre Vim a cela en utilisant :echo has("clipboard") depuis Vim (si la sortie est 0, ce nest pas présent, sil « est 1, cest le cas), ou vérifier la sortie de vim --version pour +clipboard.

La plupart des distributions Linux sont livrées avec une version  » minimale  » Vim par défaut, qui na pas +clipboard, mais vous pouvez généralement linstaller:

  • Debian & Ubuntu: Installez vim-gtk3.
  • Fedora: installez vim-X11 et exécutez vimx au lieu de vim ( plus dinfos ).
  • Arch Linux: installez gvim (cela activera également +clipboard pour vim).

Vous pouvez également utilisez xclip, xcopy ou xsel pour copier le texte dans le presse-papiers; voir ce qui suit questions pour trouver des solutions:

SSH

Vous pouvez également utiliser un presse-papiers sur des machines distantes si vous activez le transfert X11 via SSH. Ceci est particulièrement utile avec le conseil ci-dessus car vous pouvez ensuite utiliser xclip pour accéder au presse-papiers de votre bureau. Le Vim sur la machine sur laquelle vous « re ssh-ing » aura toujours besoin du +clipboard.

Cela nécessite le paramètre ForwardX11Trusted et devrait être effectué uniquement avec des serveurs de confiance , car cela donne au serveur un contrôle presque complet sur votre session X11:

$ ssh -XY myhost 

Pour rendre ces paramètres persistants (vous navez donc pas besoin dajouter -XY à chaque fois), vous pouvez faire quelque chose comme ceci dans votre ~/.ssh/config:

# Do **NOT** set this globally; it gives the server complete control over # your X11 session. Host myhost ForwardX11 yes ForwardX11Trusted yes 

Neovim

Neovim a réorganisé le support du presse-papiers. Linterface intégrée a été supprimée et remplacée par un système qui appelle un utilitaire externe tel que xclip, xsel ou pbcopy / pbpaste.

Il devrait ramassez ces utilitaires et utilisez-les. Sous OS X, pbcopy et pbpaste devraient être disponibles par défaut, sous Linux, vous voudrez probablement installer xclip, car cest le plus largement disponible (il existe en fait deux versions de xsel avec indicateurs incompatibles . est vraiment stupide).

Voir aussi :help clipboard dans Neovim.

Commentaires

  • ssh -Y implique -X donc -X peut être omis.
  • Un effet secondaire très intéressant de lapprentissage de ceci (quelques années il y a) pour moi a été la réalisation que " peut sélectionner de nombreux registres nommés. "+ nest pas magique, cest ‘ s enregistrez simplement +. Par exemple, si vous souhaitez copier trois éléments en même temps et les coller un par un, vous pouvez "1y, "2y et "3y et l ater "1p, "2p et "3p. Cest vraiment puissant et inexistant dans presque tous les autres éditeurs. Une autre utilisation intéressante est de regarder les macros stockées. Par exemple, si vous enregistrez avec qq, mais que vous réalisez que vous devez le réparer, vous pouvez: dans une ligne temporaire "qp, corriger it, et "qd.
  • Juste une note: OS X a deux presse-papiers séparés. On accède à lun en utilisant Cmd-C et Cmd-V et lautre en utilisant les raccourcis clavier emacs Ctrl-K et Ctrl-Y.
  • @shahbaz – il est probablement préférable dutiliser les registres de lettres à cette fin, car les numérotés sont modifiés chaque fois que le texte est supprimé.
  • Copier & coller comme décrit dans la question est destiné au bureau. Il est vrai que linstallation du package gvim à côté de vim vous donne des fonctionnalités de presse-papiers. mais dans les navigateurs de fichiers, deux éditeurs de texte vous sont alors proposés pour ouvrir les fichiers! Et cela a lair moche. Cest pourquoi il est préférable de ninstaller que les packages vim et vim-gui-common. Plus tard, on fournit les fonctionnalités du presse-papiers sans avoir besoin dinstaller gvim. Ceci est sur Linux Debian 10.

Réponse

De http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus 

Cela change le registre Vim par défaut en + registre, qui est lié au presse-papiers du système.De :h clipboard-unnamedplus :

 clipboard-unnamedplus unnamedplus A variant of the "unnamed" flag which uses the clipboard register "+" (quoteplus) instead of register "*" for all yank, delete, change and put operations which would normally go to the unnamed register. When "unnamed" is also included to the option, yank operations (but not delete, change or put) will additionally copy the text into register "*". Only available with the +X11 feature. Availability can be checked with: if has("unnamedplus") 

Commentaires

  • Pourquoi cela ne fonctionne-t-il pas pour moi lorsque vous collez & entre les instances de vim (chacune dans un terminal de terminaison distinct)?
  • Si vous êtes sous Linux, et que Vim a été compilé avec la fonctionnalité + X11, et que vous avez défini clipboard = unamedplus, vous devriez être en mesure de retirer une ligne dans une instance de vim et de la coller dans une autre instance de vim. Vous devriez également pouvoir le coller dans nimporte quelle autre application avec CTRL + V ou SHIFT + INSERT. Vous pouvez utiliser :version dans Vim pour voir si + X11 apparaît dans la liste des fonctionnalités incluses. Vous pouvez également vérifier si la fonctionnalité ‘ unnamedplus ‘ est disponible avec :if has('unnamedplus')⏎ echo 'yes'⏎ endif Si vous êtes pas sous Linux, vous devriez utiliser un nom au lieu de un nomplus.

Réponse

Les autres réponses expliquent comment copier texte de votre tampon dans le presse-papiers du système. Une autre opération courante consiste à copier du texte dun autre registre dans le presse-papiers. Par exemple, si vous « avez déjà extrait du texte dans " (le registre par défaut), vous voudrez peut-être charger ce registre dans le presse-papiers.

Vous pouvez faites-le avec :let:

  • let @+=@" — copie le registre par défaut dans le presse-papiers
  • let @*=@" — copie le registre par défaut dans la sélection principale X11 (« souris clipboard « )
  • let @+=@a — copie du registre a vers le presse-papiers
  • etc.

Notez que cela fonctionne pour les registres en général: let @a=@b copies register b pour enregistrer a.

Répondre

Activé les versions qui le prennent en charge, le registre nommé * est le presse-papiers système. Pour copier le texte de Vim dans le presse-papiers système, vous pouvez sélectionnez le texte en utilisant le mode visuel, puis appuyez sur "* y pour le copier dans le presse-papiers du système.

Inversement, utilisez "* p pour coller le texte du presse-papiers système dans Vim.

Réponse

Si vous ne pouvez pas trouver comment faire fonctionner +clipboard, ce que je ne pourrais pas faire pour une raison quelconque, alors vous pouvez le faire ceci.

En supposant que vous ne souhaitiez copier quune section du fichier, je fais shift + v pour aller en mode visuel et ne mettez en surbrillance que les lignes que je souhaite copier. Alors je fais ceci.

# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard 

Explication

  • "<,"> – signifie que vous utilisé le mode visuel pour sélectionner une plage (vous ne saisissez pas ceci)
  • w !{cmd} – écrivez la plage dans le stdin de cmd, en savoir plus sur :help w_c
  • wl-copy et xclip sont des programmes vers lesquels vous pouvez rediriger du texte et ils « vont lajouter au presse-papiers de votre système

De plus, une fois que cela est dans votre historique, vous navez pas à taper le tout Sélectionnez simplement avec le mode visuel, tapez w puis appuyez sur le haut et la commande devrait se compléter automatiquement. De plus, vous n’avez pas à utiliser le mode visuel. Vous pouvez définir la plage de votre choix.

Commentaires

  • Vote positif (par rapport à lautre réponse similaire) car celle-ci donne une explication. À propos, une note à moi-même ou à d’autres lecteurs: lors de l’utilisation de xclip, vous n’avez PAS à ajouter ce paramètre -selection clipboard, qui est trop long pour taper. La valeur par défaut :'<,'>w !xclip copierait le contenu dans le  » primary « , cest-à-dire copier sur- sélectionnez le presse-papiers, qui peut être collé avec le bouton central de la souris.

Réponse

Je vous recommande dutiliser Gvim, et ajoutez ceci à votre .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Cela active la prise en charge de Ctrl C , Ctrl X , Ctrl V comme le bloc-notes dans Windows.

Notez que cela ajoutera également dautres raccourcis Windows courants, tels que Ctrl S pour :w, Ctrl A pour tout sélectionner, etc.

Réponse

Javais du mal avec le presse-papiers du système et vim à lintérieur de tmux.

Le problème a été résolu en utilisant xsel ou xclip, comme dans cet exemple:

1.) visu sélectionner un bloc de texte en mode normal: V<motionkey>

2.a) avec xsel exécuter ex: :"<,">w !xsel -b

2.b) avec xclip lancer ex: :"<,">w !xclip -selection clipboard

3.) coller dans un autre programme

… et maintenant nmap ceci comme préféré.

Ces options (-b ou -selection presse-papiers) signifient essentiellement que le programme (xsel ou xclip) est envoyé en arrière-plan et attend un autre programme pour collez le contenu, afin quil puisse « interférer ».

(sur manjaro avec i3, xfce4-terminal, tmux)

Answer

Voici le comportement Je voulais en ce qui concerne le presse-papiers système:

  • Yanking une ligne avec une nouvelle ligne fonctionne
  • Yanking une ligne sans nouvelle ligne fonctionne
  • Yanking tout ce qui est visuellement œuvres sélectionnées
  • Couper les œuvres
  • Couper une ligne avec des œuvres de nouvelle ligne
  • Couper une ligne sans nouvelle ligne fonctionne

Par œuvres Je veux dire: je « suis toujours capable dutiliser p pour coller pendant que je suis dans vim et je peux également utiliser le presse-papiers du système. En gros, je veux que le copier-coller fonctionne comme prévu et je ne lai pas fait » Je veux encombrer le presse-papiers de mon système plus que nécessaire.

Ma technique consistait à mapper les commandes communes de copier, couper et supprimer pour utiliser le presse-papiers système en ajoutant ces lignes à mon ~/.vimrc:

" use system clipboard " https://anuragpeshne.github.io/essays/vim/7.html noremap y "*y noremap yy "*yy noremap Y "*y$ noremap x "*x noremap dd "*dd noremap D "*D 

Les informations clés de https://anuragpeshne.github.io/essays/vim/7.html larticle de blog est:

Le mappage récursif est maléfique, utilisez toujours le mappage non récursif. (noremap)

Commentaires

  • Que signifie le " faire? La première réponse expliquait déjà à quoi sert *, (en référence au presse-papiers principal), mais je ne ‘ aucune explication nulle part pour à quoi sert " et pourquoi cela fait fonctionner la commande.
  • Cela ‘ nest pas immédiatement évident car vous ‘ est probablement utilisé pour que la citation soit utilisée pour contourner les mots, comme "foo"; cependant, pour vim "* est en fait le nom du  » register  » (un vim concept) qui se connecte au presse-papiers du système. Si vous ouvrez vim et tapez :registers, vous pouvez voir les noms dautres registres tels que: "", "0, "1, etc. Jai trouvé cet article utile pour en savoir plus sur les registres: brianstorti.com/vim-registers

Réponse

Si votre vim ne prend pas en charge +clipboard, vous pouvez utiliser le fakeclip plugin pour Linux, Mac, Windows, tmux, screen, …

Answer

Toutes les autres réponses ont couvert toutes les choses importantes sur les registres. Je voudrais ajouter une autre chose que jutilise.

Il existe un moyen dans Vim de copier directement le sélectionné visuellement texte dans le presse-papiers. Mettez simplement ceci dans votre fichier vimrc :

set guioptions+=a 

Et, avec ceci chaque fois que vous sélectionnez visuellement du texte, il sera copié sur votre presse-papiers. Pour plus dinformations à ce sujet, :help guioptions

BTW, ceci est uniquement pour gVim.

Commentaires

  • guioptions+=a est également mentionné dans la réponse de Carpetsmoker ‘.
  • @muru Ouais, désolé . Je nai ‘ pas vu ça avant. Je viens de le voir.

Réponse

Vous pouvez également utiliser une commande globale pour mettre un motif spécifique sur le presse-papiers. Cela peut être utile dans les situations où vous avez des informations éparpillées dans un fichier et où la copie manuelle est sujette à des erreurs et fatiguant.

Commencez par nettoyer le registre qui recevra les informations

:let @a="" 

Puis copiez-y toutes les lignes contenant le motif

:g/pattern/yank A 

Enfin, le transfert (copie) des informations dans le presse-papier système

:let @+=@a 

si vous essayez de copier chaque ligne contenant un « motif » directement dans le presse-papiers, cela ne fonctionnera pas car le presse-papiers na pas la capacité dajouter un nouveau contenu, nous utilisons donc ici un registre vim normal pour stocker toutes les lignes contenant le motif à la fois et le mettre ensuite dans le presse-papier.

OBS: Il est nécessaire de cliner le registre avant de lutiliser, et le lutilisation de la version UPPERCASE du registre nous permet dajouter du contenu, sinon cela ne fonctionnera pas non plus.

Réponse

MacVim Cmd + x/c/v pour couper / copier / coller

Si vous utilisez MacVim, les Cmd+x/c/v habituels sont définis dans $ VIMRUNTIME / macmap.vim qui est fourni par défaut et donc disponible sans configuration:

vnoremap <special> <D-x> "+x vnoremap <special> <D-c> "+y cnoremap <special> <D-c> <C-Y> nnoremap <special> <D-v> "+gP cnoremap <special> <D-v> <C-R>+ execute "vnoremap <script> <special> <D-v>" paste#paste_cmd["v"] execute "inoremap <script> <special> <D-v>" paste#paste_cmd["i"] 

Cependant, leur utilisation peut conduire à des utilisateurs de vim qui ne connaissent pas le vim et sont perdus sur un ordinateur / environnement étranger.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *