Comment copier une sélection dans le presse-papiers OS X

225

J'ai une zone sélectionnée à Vim. Comment puis-je le copier dans le presse-papiers OS X?

(Le presse-papiers OS X peut être écrit via un tuyau vers /usr/bin/pbcopy)

ʞɔıu
la source
4
il suffit alors de sélectionner visuellement "+y.
zx1986
2
Le vim livré avec Mac OS X ne possède +clipboardou +xterm-clipboard. Vous pouvez le vérifier avec vim --version | grep clipboard. Il est possible de résoudre ce problème avec brew install vim --with-client-server.
LondonRob
1
Ou utilisez MacVim, qui offre une version en ligne de commande qui peut être liée par un lien symbolique dans votre ~/bin, puis ~/bininsérée dans votre chemin avant le vim et les synonymes installés par le système.
The Tin Man
En s'appuyant sur ce que @ zx1986 a écrit, j'ai fait trois choses: 1) Ajout de ce qui suit à mon ~ / .bashrc afin d'alias vi / vim au mode terminal de MacVim: alias vi='mvim -v'2) Ajout de ce qui suit à ~ / .vimrc, qui mappe Ctrl + c (pas Cmd + c): vnoremap <C-c> "+y3) Clavier Maestro configuré pour taper la séquence de ^ctouches (Ctrl + C) lors de l'exécution dans le terminal (dans mon cas iTerm2) Cela permet d'utiliser Cmd + c pour copier du texte dans le presse-papiers OSX afin qu'il puisse être collé dans d'autres applications OSX.
Neil Griffin

Réponses:

79

Selon la version de Vim que j'utilise, je peux utiliser le +registre pour accéder au presse-papiers.

Le « partage du presse-papiers de Mac OS X » peut également contenir des idées qui vous conviennent.

Chris AtLee
la source
5
Pour les gens avec VIM compilé sans + presse-papiers, le lien ci-dessus est une excellente ressource pour donner des solutions sans recompiler VIM
sdjuan
DÉTAIL TRÈS IMPORTANT !!! Si vous avez la version 7.3 de Vim, cela pourrait ne pas fonctionner pour vous, mais si vous avez la version 7.4 de Vim, cela fonctionne (et parfois vous n'avez même pas besoin de faire tout "+ y). Et vous vérifiez cela simplement écrire> vim dans le terminal, puis le numéro de version est lorsque vous le démarrez.
Zeth
cette réponse est la même que celle stackoverflow.com/a/680271/2652524
Gujarat Santana
1
Le "+registre existe uniquement pour X11 (à moins que vous ne construisiez vim avec le support + X11, qui installera un serveur X11 XQuartz dans OS X), tandis qu'OS X n'utilise pas X11 comme système Windows.
nn0p
Que faire, si les deux - vimet macvimavoir + presse-papiers. Et clipboard=unnamedajouté à ~/.vimrc? On dirait une vraie douleur, j'ai essayé toutes les solutions de contournement et je dois actuellement utiliser des spacemacs, quand je sais, que je vais devoir utiliser le presse-papiers global :)
Nikolay Fominyh
240

Pour MacVim et Windows Gvim, ajoutez simplement ce qui suit à votre ~/.vimrc:

set clipboard=unnamed

Maintenant toutes les opérations telles que yy, Det le Ptravail avec le presse - papiers. Pas besoin de les préfixer avec "*ou "+.

George V. Reilly
la source
2
J'ai passé toute la matinée à trouver comment séparer les commandes y, d et P de ⌘-C et ⌘-V que MacVim vous permet et j'ai finalement trouvé cela. Effectivement, je l'avais ajouté à mon vimrc quand j'étais un juvénile vim et cela m'a frustré depuis.
Jonathan Dumaine
2
Pour ceux qui ne connaissent pas MacVim, il est utilisable depuis le terminal avec le -vflag ( mvim -v). J'ai le mien alias pour vim et mvim.
pk-nb
3
Comme mentionné par @VincentG dans son commentaire ci-dessus, cela fonctionne en effet avec les versions basées sur terminal de Vim, mais ceux qui utilisent tmux dans le terminal devront suivre l'une des solutions détaillées ici: stackoverflow.com/a/11421329/456584
user456584
3
cela devrait être la réponse acceptée - aussi longtemps que :echo has("clipboard")dit 1, ce qui est le cas pour MacVim, et j'ai un vialias qui s'exécute à la mvim -vplace
jdsumsion
1
@Joseph, si :versionvous le montre, -clipboardla version de Vim ne prend pas en charge la fonction de presse-papiers. Je parlais de MacVim, qui est une application graphique.
George V. Reilly
136

Si le presse-papiers est activé, vous pouvez copier une région sélectionnée dans le presse-papiers en appuyant sur "*y

Pour voir s'il est activé, exécutez vim --versionet recherchez +clipboardou -clipboard. Par exemple, il n'est pas activé par défaut sur ma box 10.5.6:

% qui vim
/ usr / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9 août 2008, compilé le 11 novembre 2008 17:20:43)
Patchs inclus: 1-22
Compilé par [email protected]
Version normale sans interface graphique.  Fonctionnalités incluses (+) ou non (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + commentaires
 ...

S'il avait été compilé avec +clipboard, je serais en mesure d'utiliser le "*registre pour accéder au presse-papiers du système.

J'ai téléchargé la source 7.2 et l' ai compilé (aussi simple que cela tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install), et le presse-papiers a été activé:

% qui vim
/ usr / local / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9 août 2008, compilé le 24 mars 2009 17:31:52)
Compilé par [email protected]
Version normale avec GTK2 GUI.  Fonctionnalités incluses (+) ou non (-): 
... 
+ clientserver + presse-papiers + cmdline_compl + cmdline_hist + cmdline_info + commentaires
 ...

Cependant, même après la compilation, je ne pouvais pas copier dans le presse-papiers lors de l'exécution de vim dans Terminal.app, uniquement dans X11.app.

rampion
la source
3
J'ai compilé la dernière version avec + presse-papiers et maintenant le presse-papiers natif fonctionne avec comme le registre *. En outre, la définition de "set clipboard = unlamed" dans votre fichier .vimrc rend le presse-papiers système le plus typique. J'ai en fait utilisé github.com/adamv/homebrew/blob/duplicates/Library/Formula/… cette formule homebrew pour le construire et le compiler.
rado
Hmm, je ne sais pas pourquoi Vim n'apparaît pas dans mon Homebrew, mais je l'ai copié dans / usr / local / Library / Formula, j'ai exécuté vrew install vim, et il a échoué avec "ld: bibliothèque introuvable pour -lruby-static ". J'utilise RVM et j'étais sur 1.8.7. Lorsque je suis passé à 1.9.2, l'erreur était "ld: bibliothèque non trouvée pour -lruby.1.9.1". La solution consistait à utiliser le système Ruby en exécutant d'abord le système d'utilisation rvm.
Justsee
9
Un peu plus facile que de rechercher le mot "presse-papiers" dans ce qui est généralement une longue liste de fonctionnalités: faire :echo has("clipboard"). S'il affiche 0, il n'est pas compilé. S'il affiche 1, il l'est.
ravron le
3
vous pouvez également obtenir vim compilé avec le presse-papiers en utilisant homebrew: brew install vim
Anton Koval '28
4
Il faut se méfier! J'avais une +clipboardversion, mais j'avais installé --with-client-serverce qui permet +x11, et essayer de copier / coller sur x11 dans le terminal vim sur macOS n'a pas fonctionné :) J'ai dû réinstaller sans +clientserver.
jacwah
96

Vous pouvez sélectionner visuellement le texte et taper :w !pbcopy<CR>

Ou vous pouvez inclure les mappages de touches ci-dessous dans votre ~/.vimrcfichier. Ils coupent / copient du texte en mode visuel dans le presse-papiers du système d'exploitation.

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

source: http://drydevelopment.com/blog/vim-pbcopy-on-os-x

user242065
la source
6
Vous pouvez également sélectionner du texte dans la ligne de commande comme: 1,10w! Pbcopy pour copier les lignes 1-10 dans le presse-papiers. Le w est important avec l'espace après pour garder le texte original en place. Le lien source ci-dessus est maintenant rompu mais il y a une discussion ici: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan
J'ai suivi cela pour que cela fonctionne dans tmux: superuser.com/questions/231130/…
Wex
@Wex Link a été corrigé
SnoringFrog
2
Notez que cela ne semble fonctionner que pour sélectionner des lignes entières. Cela ne semble pas fonctionner si vous ne souhaitez sélectionner qu'une partie d'une ligne. stackoverflow.com/questions/16196826/…
Kevin Wheeler
1
@Kevin Wheeler: vous pouvez essayer avec la commande suivante qui peut résoudre la copie non-ligne noremap <silent> <leader> y: <CR>: laissez @ a = @ "\ | execute" normal! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang
38

astérisque ( "*) entre guillemets avant toute commande yank tirera les résultats dans le tampon de copie. Cela fonctionne aussi pour Windows et Linux.

Paul Tomblin
la source
11
semble juste émettre un caractère de cloche et aucun autre effet pour moi
ʞɔıu
3
Dans X11, Vim "* est PRIMAIRE", + est CLIPBOARD, et SECONDAIRE n'obtient pas de registre nommé. (Pas que quelqu'un l'utilise ...)
éphémère
À la perfection. Aide vraiment, en particulier avec la sélection de bloc (ctrl-v).
Sonique
Étant donné que la question concernait spécifiquement Mac OS X, il n'est pas nécessaire d'ajouter qu'il fonctionne également pour Mac.
Paul Tomblin
@PaulTomblin okay, assez juste :-)
apprenticeDev
26

Sur macos 10.8, vim est compilé avec -clipboarddonc pour l'utiliser, "*yvous devrez recompiler. Heureusement, il brew install vimserait facile de compiler une nouvelle version pour vous et ce le sera +clipboard.

nikola
la source
1
Quelque chose à garder à l'esprit - assez bizarrement, brew install vimavec des mises à jour vi, et non vim . Ainsi, vous devrez peut-être modifier les alias différemment après l'installation de vim avec homebrew.
shridharama
18

Sélectionnez visuellement le texte et saisissez:

ggVG
!tee >(pbcopy)

Ce que je trouve plus agréable que:

ggVG
:w !pbcopy

Puisqu'il ne fait pas clignoter une invite: "Appuyez sur ENTRÉE ou tapez la commande pour continuer"

James Scriven
la source
Copie toujours toute la ligne
Karl Pokus
11

Si vous utilisez MacPorts, vous pouvez mettre à niveau votre VIM pour inclure la prise en charge du presse-papiers via:

port install vim +x +x11

Maintenant, vous utilisez le "+registre pour extraire votre texte directement dans le presse-papiers de votre Mac. Fonctionne comme un charme.

Matt Hughes
la source
1
C'est exactement ce dont j'avais besoin. Il suffit de s'assurer que $ PATH est correct et que vous obtenez / opt / local / bin / vim et non le Apple vim.
Gareth
8

Si vous êtes sous MacOS X:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

Ensuite, ajoutez à votre .vimrc:

set clipboard=unnamed

Maintenant, il vous suffit d'être dans Vim et de le faire :%y, pour que tout le contenu soit copié dans votre presse-papiers.

Jose Alban
la source
le contenu est retiré mais je ne peux pas coller en dehors de VIM.
priagupd
5

Utilisez le vim de Homebrew :brew install vim

Mac (à partir de 10.10.3 Yosemite) est livré préinstallé avec un système vim dont le drapeau n'est pasclipboard activé.

Vous pouvez soit compiler vim pour vous-même et activer cet indicateur, soit simplement utiliser le vim de Homebrew qui est correctement configuré.

Pour le constater par vous-même, consultez le système de stock vim avec /usr/bin/vim --version

Vous verrez quelque chose comme:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by [email protected]
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

Noter la -clipboard

Avec le vim de homebrew, vous obtenez à la place

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

Noter la +clipboard

Evan
la source
1
Alors comment faire la copie?
Frozen Flame
avec la version brew de vim j'ai pu faire ce que je voulais: j'ai mis en surbrillance les lignes en utilisant Valors :w !pbcopyet cela a fonctionné
davidpm4
5

Si votre Vim n'est pas compilé avec des presse-papiers, vous souhaitez copier le texte sélectionné au lieu de lignes entières, vous ne voulez pas installer MacVim ou une autre interface graphique, la solution la plus simple est d'ajouter cette ligne à votre .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Pour l'utiliser, sélectionnez simplement visuellement le texte que vous souhaitez copier, puis Control- C. Si vous voulez une explication complète de cette ligne, lisez " Comment copier dans le presse-papiers sur vim ".

songz
la source
mais ça me donne aussi 2 lignes noires après la copie du texte
Nic Wanavit
4

J'ai utilisé:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

Cela a très bien fonctionné.

user3133576
la source
3

Vous pouvez utiliser MacVim lorsque vous êtes sur un Mac pour accéder facilement au presse-papiers à l'aide des touches de système d'exploitation standard.

Il est également entièrement rétrocompatible avec Vim normal, donc je n'ai même pas besoin d'en avoir un séparé .vimrc.

matpie
la source
J'utilise MacVim, puis j'ai créé un lien symbolique entre les synonymes de la ligne de commande vim dans mon ~/binpour remplacer les valeurs par défaut.
The Tin Man
2

commande-C? Cela fonctionne au moins pour le vim lancé à partir de Terminal.app pour le texte sélectionné avec la souris.

mouviciel
la source
6
bonne réponse naïve mais casse la sortie si vous utilisez des sous-fenêtres divisées verticalement dans vim (ce qui est en fait le cas que j'ai en tête), ou si le résultat est plus long qu'un écran de terminal
Marıu
3
Vous avez raison, je n'ai pas pensé à ces cas. Je laisse ma réponse juste pour empêcher les autres de donner des réponses similaires non utiles.
mouviciel
2

Fakeclip implémente les tampons +et *s'ils ne sont pas pris en charge nativement.

expurgé
la source
2

Mon principal problème était la version OSX par défaut de Vim. L'installation via homebrew a été ajoutée +clipboardà la version.

Vous pouvez vérifier avec:

vim --version

pour voir si ça dit -clipboardou +clipboard.

frbl
la source
2

si vous avez l' +clipboardoption sur votre installation Vim (vous pouvez vérifier avec :version) et que vous êtes en mode visuel, vous pouvez le faire "+yCela ramènera la sélection au tampon +qui est le presse-papiers.

J'ai ajouté les cartes suivantes à mon vimrc et cela fonctionne très bien.

vmap <leader>y "+y : Avec cela, je peux faire leader keysuivre ypour copier dans le presse-papiers en mode visuel.

nmap <leader>p "+p : Avec cela, je peux faire leader keysuivre pde coller du presse-papiers en mode normal.

PD: Sur Ubuntu, j'ai dû installer vim-gtk pour obtenir l' +clipboardoption.

Andrés Hazard
la source
0

sur mac lorsque quoi que ce soit d'autre semble fonctionner - sélectionnez avec la souris, faites un clic droit choisissez copier. uff

à M
la source
0

Je suis actuellement sous OS X 10.9 et mes efforts pour compiler vim avec + xterm_clipboard ne m'ont rien apporté. Donc, ma solution actuelle consiste à utiliser MacVim en mode terminal avec l'option set clipboard=unnameddans mon fichier ~ / .vimrc. Fonctionne parfaitement pour moi.

Yaroslav Melnichuk
la source
0

Ce qui a fonctionné pour moi dans mon .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif
maged
la source
0

Pour Mac - Maintenir la optiontouche suivie de la ctrl Vsélection du texte a fait l'affaire.

markroxor
la source
0

Shift cmd c - définir le mode de copie Faites glisser la souris, sélectionnez le texte, cmd c pour copier le texte sélectionné Cmd v pour coller

user518066
la source
-1

Pour les utilisateurs d'Ubuntu, le package que vous souhaitez récupérer pour utiliser le presse-papiers est complet. Les autres packages (vim-tiny, vim) n'incluent pas la fonction de presse-papiers.


la source
vim-full n'est plus un nom de package ubuntu. le paquet vim par défaut (7.3.154) a un ensemble minimal de fonctionnalités, y compris -clipboard. L'installation de vim-gtk ou vim-nox fournira une version + presse-papiers.
spazm
-1

La copie dans le presse-papiers à l'aide du registre «+» ou «*» ne fonctionne pas?

Raison: Votre version particulière de vim a été compilée sans prise en charge du presse-papiers. Tapez vim --verion sur la console et vous verrez -xterm_clipboard . L'installation de vim avec des packages gui résout ce problème. Sur ubuntu, vous pouvez le faire en tapant sur shell:

sudo apt-get install vim-gui-common

Maintenant, faites à nouveau vim --version sur la console. Très probablement, vous verriez + xterm_clipboard maintenant !!

Donc, maintenant vous pouvez copier n'importe quoi dans le presse-papiers en utilisant register + (comme "+ yy pour copier la ligne courante dans le presse-papiers)

VineetChirania
la source
-1

Je rencontre le même problème, après l'installation macvimne fonctionne toujours pas, j'ai finalement trouvé un moyen de résoudre:

Essayez de désinstaller tous les vim en premier,

brew uninstall macvim

brew uninstall --force vim

et réinstallez macvim

brew install macvim --with-override-system-vim

Ensuite, vous pouvez utiliser "*you "+yne pas avoir àset clipboard=unnamed

Bruce
la source
-2

Command-c fonctionne pour moi dans MacVim et dans le terminal.

Matt Williamson
la source
Le copier-coller traditionnel ne fonctionne pas avec les tampons Vim et peut complètement gâcher votre mise en forme. Par exemple, la copie de 15 lignes d'objets imbriqués avec Cmd + C, puis le collage avec Cmd + V entraînera une perte de compréhension de l'imbrication. Cela dépend très probablement de vos paramètres dans votre .vimrc et peut être très particulier
netpoetica