Existe-t-il un moyen de copier un bloc de texte dans le Presse-papiers du système pour que je puisse le coller dans un autre programme?
cpip
, cpi{
.
Existe-t-il un moyen de copier un bloc de texte dans le Presse-papiers du système pour que je puisse le coller dans un autre programme?
cpip
, cpi{
.
Réponses:
Pour les systèmes basés sur X11 (c'est-à-dire Linux et la plupart des systèmes similaires à UNIX ), il existe deux presse-papiers indépendants l'un de l'autre:
^C
, et collé avec ^V
(c'est comme MS Windows).Les systèmes OS X et Windows ne possèdent qu'un seul presse-papiers.
Pour les systèmes X11, de nombreux outils synchronisent ces presse-papiers à votre place. alors, si elles semblent être les mêmes, vous pouvez en avoir un en cours d'exécution.
Vim a deux registres spéciaux correspondant à ces presse-papiers:
*
utilise PRIMARY; mnémonique: S goudron est S élu (pour copie sur des élus)+
utilise CLIPBOARD; mnémonique: CTRL PLUS C (pour le keybind commun)Sous Windows et OS X, il n'y a pas de différence entre +
et *
, car ces systèmes ne possèdent qu'un seul presse-papiers et que les deux registres font référence à la même chose (peu importe celui que vous utilisez).
Vous pouvez utiliser ces registres comme n'importe quel registre. Par exemple, en utilisant le presse-papiers PRIMARY *
avec les commandes y
et p
:
"*yy
"*p
Vous pourriez peut-être utiliser ceci comme une liaison plus pratique:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
Si vous souhaitez "automatiquement" vous connecter au presse-papiers du système au lieu de le consulter manuellement tout le temps, vous pouvez définir la clipboard
variable:
unnamed
utiliser *
(PRIMARY, on select)unnamedplus
utiliser +
(CLIPBOARD, ^C
)Maintenant, simplement utiliser yy
ira dans le presse-papiers du système, au lieu du registre sans nom de Vim, et p
collera le presse-papiers du système.
Vous pouvez aussi assigner à ces registres comme n'importe quel registre avec let
:
:let @+=42
:let @*=42
Le clipboard
paramètre comporte quelques options supplémentaires (telles que les filtres d’exclusion); mais ce sont les bases. Voir :help 'clipboard'
pour l'histoire complète ;-)
Si vous utilisez gVim, vous pouvez obtenir un comportement de copie sur sélection lors de l'utilisation
:set guioptions+=a
.
Cette option est activée par défaut sur les systèmes X11 (copies sur PRIMARY), mais pas sur MS Windows et OSX (car la sélection de texte remplacerait le presse-papiers).
+clipboard
?Vim a besoin de l' +clipboard
indicateur de fonctionnalité pour que cela fonctionne; vous pouvez vérifier si votre Vim a cela en utilisant :echo has('clipboard')
depuis Vim (si la sortie est 0
, elle n'est pas présente, si c'est le cas 1
) ou en vérifiant la sortie de
vim --version
pour +clipboard
.
La plupart des distributions Linux sont livrées avec une version "minimale" de Vim par défaut +clipboard
, mais vous pouvez généralement l'installer:
vim-gtk
ou vim-gnome
.vim-X11
et exécuter à la vimx
place de vim
( plus d'infos ).gvim
(cela +clipboard
activera vim
aussi normalement ).Vous pouvez également utiliser xclip
, xcopy
ou xsel
pour copier du texte dans le presse-papiers; voir les questions suivantes pour des solutions:
Vous pouvez également utiliser un presse-papiers sur des ordinateurs distants si vous activez le transfert X11 via SSH. Ceci est particulièrement utile avec l’astuce ci-dessus puisque vous pouvez ensuite utiliser
xclip
pour accéder au Presse-papiers de votre bureau. Le Vim sur la machine à laquelle vous êtes connecté aura toujours besoin de cette +clipboard
fonctionnalité.
Cela nécessite la ForwardX11Trusted
configuration et ne devrait être effectué qu'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 n'avez donc pas besoin d'ajouter à -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 a réorganisé le support du presse-papiers. L'interface intégrée a été retiré et remplacé par un système qui appellent un utilitaire externe tel que xclip
, xsel
ou
pbcopy
/ pbpaste
.
Il devrait automatiquement ramasser ces utilitaires et les utiliser. Sous OS X pbcopy
et pbpaste
devrait être disponible par défaut, sous Linux, vous voudrez probablement l'installer xclip
, car c'est la version la plus largement disponible (il existe en fait deux
versions xsel
avec des indicateurs incompatibles . C'est vraiment stupide).
Voir aussi :help clipboard
dans Neovim.
"<Space>
pour obtenir un "
. Donc, dans ce cas, vous devrez appuyer "<Space>+y
ou "<Space>*y
copier.
"
permet de sélectionner de nombreux registres nommés. "+
n'est pas magique, il suffit de vous inscrire +
. Ainsi , par exemple, si vous voulez copier trois choses en même temps et coller chacun d'eux un par un, vous pouvez "1y
, "2y
et "3y
plus tard "1p
, "2p
et "3p
. C'est 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
, le corriger, et "qd
.
Les autres réponses expliquent comment copier du texte de votre tampon dans le presse-papiers du système. Une autre opération courante consiste à copier du texte d'un autre registre dans le presse-papiers. Par exemple, si vous avez déjà inséré du texte dans "
(le registre par défaut), vous pouvez charger ce registre dans le presse-papiers.
Vous pouvez le faire avec :let
:
let @+=@"
- copie le registre par défaut dans le presse-papierlet @*=@"
- copie le registre par défaut dans la sélection primaire X11 ("presse-papiers de la souris")let @+=@a
- copie du registre a
dans le presse-papierNotez que cela fonctionne pour les registres en général: les let @a=@b
copies s'enregistrent b
pour s'enregistrer a
.
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')
:version
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 n'êtes pas sous Linux, vous devez utiliser unnamed au lieu de unnamedplus.
Sur les versions qui le prennent en charge, le registre nommé *
est le presse-papiers du système. Pour copier du texte de Vim dans le presse-papiers du système, vous pouvez sélectionner le texte en mode visuel, puis appuyer sur "*ypour le copier dans le presse-papiers du système.
Inversement, utilisez "*ppour coller du texte du presse-papiers du système dans Vim.
Je vous recommande d'utiliser Gvim et de l'ajouter à votre .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Cela permet le support pour CtrlC, CtrlX, CtrlVcomme le bloc - notes dans Windows.
Notez que cela ajoutera également d’autres raccourcis Windows courants, tels que CtrlSpour :w
, CtrlApour tout sélectionner, etc.
Chaque autre réponse a couvert toutes les choses importantes concernant les registres. J'aimerais ajouter une dernière chose que j'utilise.
Il existe un moyen dans Vim de copier directement le texte sélectionné visuellement dans le presse-papiers. Il suffit de mettre ceci dans votre fichier vimrc :
set guioptions+=a
Et, avec cela, chaque fois que vous sélectionnez visuellement du texte, il sera copié dans votre presse-papiers. Pour plus d'informations à ce sujet,:help guioptions
BTW, ceci est seulement pour gVim.
guioptions+=a
est également mentionné dans la réponse de Carpetsmoker.
Vous pouvez également utiliser une commande globale pour mettre un motif spécifique dans le presse-papiers. Cela peut être utile dans les cas où vous avez des informations dispersées dans un fichier et que le traitement manuel est sujet aux erreurs et à la fatigue.
Commencez par nettoyer le registre qui recevra les informations
:let @a=""
Puis copiez toutes les lignes contenant le motif
:g/pattern/yank A
Enfin, transférer (copier) les informations dans le presse-papiers du système
:let @+=@a
si vous essayez de copier chaque ligne contenant un "motif" directement dans le presse-papier, cela ne fonctionnera pas car le presse-papier n'a pas la capacité d'ajouter un nouveau contenu. Nous utilisons donc ici un registre vim normal pour stocker toutes les lignes contenant le motif à la fois et ensuite le mettre sur le presse-papiers.
OBS: Il est nécessaire de nettoyer le registre avant de l'utiliser et l'utilisation de la version UPPERCASE du registre nous permet d'ajouter du contenu, sinon il ne fonctionnera pas non plus.
Si vous ne savez pas comment vous rendre +clipboard
au travail, ce que je ne pouvais pas pour une raison quelconque, vous pouvez le faire.
En supposant que vous souhaitiez uniquement copier une section du fichier, je shift
+ v
passe en mode visuel et ne met en évidence que les lignes que je souhaite copier. Alors je fais ça.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
Explication
'<,'>
- signifie que vous avez utilisé le mode visuel pour sélectionner une plage (vous ne tapez pas ceci)w !{cmd}
- écrivez la plage au stdin de cmd
, voyez plus à:help w_c
wl-copy
et xclip
sont des programmes que vous pouvez diriger du texte vers et ils vont l'ajouter à votre presse-papiers systèmeEn outre, une fois que cela est dans votre histoire, vous n'avez pas à taper à nouveau le tout. Il suffit de sélectionner avec le mode visuel, tapez w
puis appuyez sur et la commande doit compléter automatiquement. De plus, vous n’avez pas à utiliser le mode visuel. Vous pouvez définir ce que vous voulez.