Est-il possible de copier dans le presse-papier directement à partir de Vim? yy
ne copie que des fichiers dans la mémoire tampon interne de Vim. Je veux copier dans le presse-papiers du système d'exploitation. Existe-t-il une telle commande dans Vim ou pouvez-vous seulement retirer des choses dans Vim?
Le registre *
le fera. Sous Windows, +
et *
sont équivalents. Sous Unix, il existe une différence subtile entre +
et *
:
Sous Windows, les registres * et + sont équivalents. Pour les systèmes X11, cependant, ils diffèrent. Pour les systèmes X11, * est la sélection et + le tampon de coupe (comme dans le presse-papiers). http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
est probablement ce que vous voulez la plupart du temps. J'utilise donc *
parce qu'il fonctionne comme je le souhaite dans les deux environnements.
Dans les distributions Linux, pour une raison quelconque, vous devez d'abord installer vim-gtk pour bénéficier des fonctionnalités du presse-papiers.
Et pour ceux qui ne savent pas comment utiliser les registres pour tirer ou mettre, vous écrivez simplement "
, puis le nom du registre. Donc, pour copier quelque chose dans le presse-papiers, tapez "*y
, puis tapez "*p
.
Sur Mac OSX
copier la partie sélectionnée: sélection visuelle du texte (tapez v
ou V
en mode normal) et tapez :w !pbcopy
copier le fichier entier :%w !pbcopy
coller du presse-papiers :r !pbpaste
Sur most Linux Distros, vous pouvez remplacer:
pbcopy
ci-dessus avec xclip -i -sel c
ou xsel -i -b
pbpaste
utilisant xclip -o -sel -c
ou xsel -o -b
xsel
et xclip
) n'est préinstallé sur votre distribution, vous pouvez probablement les trouver dans le dépôt Dans votre fichier vimrc, vous pouvez spécifier d'utiliser automatiquement le Presse-papiers du système pour le copier-coller.
Sous Windows:
set clipboard=unnamed
Sous Linux (vim 7.3.74+):
set clipboard=unnamedplus
REMARQUE: Vous devrez peut-être utiliser une version à jour de Vim pour que ces derniers fonctionnent.
Utilisez le registre "+
pour copier dans le presse-papiers du système (c'est-à-dire "+y
au lieu de y
).
De même, vous pouvez coller depuis "+
pour obtenir du texte dans le presse-papiers du système (c'est-à-dire "+p
au lieu de p
).
@Jobob Dalton a mentionné cela dans un commentaire, mais personne ne semble avoir mentionné dans une réponse que vim doit être compilé avec le support du presse-papiers pour que les suggestions mentionnées ici fonctionnent. Le mien n'était pas configuré de cette façon sur Mac OS X par défaut et j'ai dû reconstruire vim. Utilisez cette commande pour savoir si vous l'avez ou non vim --version | grep 'clipboard'
. +clipboard
signifie que vous êtes bon et les suggestions présentées ici fonctionneront pour vous, tandis que -clipboard
signifie que vous devez recompiler et reconstruire vim.
Résumer et rendre plus facile pour les débutants,
Pour copier la ligne en cours, en mode commande, tapez:
"*yy
Pour copier tout le fichier/tampon, en mode commande, commencez par le début via gg
, puis tapez
"*yG
Comme indiqué, cela nécessite +clipboard
sur vim --version
, qui indique la disponibilité du support du presse-papiers, -clipboard
signifie non.
Si vous utilisez vim sous MAC OSX, il est malheureusement livré avec une version plus ancienne et n’est pas conforme aux options du Presse-papiers. Heureusement, les homebrews peuvent facilement résoudre ce problème.
installer vim:
_brew install vim
_
installer la version de vim:
_brew install macvim
_
redémarrez le terminal pour prendre effet.
ajoute la ligne suivante à ~/.vimrc
_set clipboard=unnamed
_
vous pouvez maintenant copier la ligne dans vim avec yy
et la coller dans l’ensemble du système.
Méthode mise à jour:
Je n’ai jamais été satisfait de la méthode du presse-papiers depuis des années. Le plus gros inconvénient est que cela va gâcher votre historique du presse-papiers, même si vous utilisez x
pour la suppression. Voici une solution meilleure et plus élégante.
Copiez le texte [plage] de vim dans le presse-papiers du système. (Conseil: utilisez v
ou V
pour sélectionner d'abord la plage, puis tapez le signe deux-points _:
_ pour activer la commande Ex):
_:[line-range]yank +
_
par exemple.,
_:5,10y *
_ (copie/suppression des lignes 5 à 10 dans le registre du presse-papiers du système _*
_)
Collez le contenu du presse-papiers du système dans vim sur une nouvelle ligne:
_:put +
_
Remarque:
brew info vim
_ pourra voir d'autres options pour installer vim. Actuellement, il n'a pas d'autres options.Je n'ai pas pu copier sur le système de mon presse-papiers parce que j'avais dans mon fichier ~/.vimrc:
if has('mouse')
set mouse=a
endif
Mais si vous ajoutez cette ligne ensuite, cela vous permettra simplement Ctrl+c pour obtenir ce que vous avez sélectionné dans votre presse-papiers.
vmap <C-c> "+y
Discussion originale et plus de détails: Copier le texte hors de vim avec set mouse = a enabled
Pour Ubuntu - Juillet 2018
Utilisez le registre "+ pour copier dans le presse-papiers du système (c'est-à-dire " + y au lieu de y).
De même, vous pouvez coller de "+ pour obtenir le texte du presse-papiers du système (c'est-à-dire " + p au lieu de p).
Vous devez également vous assurer que vim est compilé avec le support du presse-papiers. Essayer:
vim --version | grep .xterm_clipboard -o
et si c'est - xterm_clipboard (un préfixe moins), alors vous avez pas avez le support.
Voici quelques instructions pour échanger une version fonctionnelle de vim prenant en charge le presse-papiers.
Vérifiez à nouveau avec vim --version | grep .xterm_clipboard -o
et vous pourrez confirmer que le presse-papiers est maintenant disponible (c.-à-d. + xterm_clipboard)
Bonne chance.
la solution pour moi était d'installer vim supplémentaire avec l'option presse-papier incluse:
Sudo apt-get install vim-gnome
Si vous utilisez GVim, vous pouvez également set guioptions+=a
. Cela déclenchera la copie automatique dans le presse-papier du texte que vous mettez en surbrillance en mode visuel.
Inconvénient: Notez que les gestionnaires de presse-papiers avancés (avec historique) obtiendront dans ce cas tout l'historique de votre sélection…
Vous pouvez trouver les réponses ici Arch Wiki
Pour Linux: vous devez tout d'abord activer Clipboard dans votre version de vim en installant gvim
.
Ensuite, vous devez mettre cette ligne sur votre fichier .vimrc
.
set clipboard=unnamedplus
Si votre vim est compilé sans l'option +xterm_clipboard
, comme c'est le cas par défaut dans Debian et Ubuntu, vous pouvez diriger la sélection ou la mémoire tampon entière vers un programme externe qui gère le presse-papiers du bureau. Pour xclip
(que vous devrez peut-être installer précédemment), la commande sera :w !xclip -sel clip
Dans vim sous ubuntu terminal uniquement,
appuyez sur shift + drag mouse
pour sélectionner un texte dans vim puis sur ctrl + shift + c
sur le terminal
then ctrl + v
sur un autre éditeur
Si vous avez xclip, un moyen simple de copier du texte dans le presse-papiers est le suivant:
y
dans Vanilla vim):call system("xclip -selection clipboard", @")
:call system()
exécute une commande de terminal. Il faut deux arguments, le premier la commande, le second ce qu'il faut diriger vers cette commande. Par exemple, :echom system("head -1", "Hello\nWorld")
renvoie Hello (avec un remplissage). echom renvoie le résultat d'une commande, l'appel n'appelle pas.
xclip -selection clipboard
copie simplement le texte dans le presse-papiers du système, par opposition au presse-papiers par défaut de X (accessible par le bouton du milieu).
@"
renvoie le dernier texte extrait. "est le registre par défaut, mais vous pouvez utiliser n’importe quel registre. Pour voir le contenu de tous les registres, tapez :registers
.
set clipboard=unnamed
dans votre vimrc
.Visual
(appuyez sur v pour entrer).Normal
(appuyez sur la touche d'échappement [esc]), appuyez sur y pour copier.Normal
.Peut-être que quelqu'un trouvera cela utile. Je voulais rester indépendant du presse-papiers X et pouvoir toujours copier et coller du texte entre deux vims en cours d'exécution. Ce petit code enregistre le texte sélectionné dans le fichier temp.txt pour le copier. Mettez le code ci-dessous dans votre fichier .vimrc. Utilisez CTRL-c CTRL-v pour effectuer le travail.
vnoremap: w! cp/dev/null ~/temp.txt && cat> ~/temp.txt
noremap: r! cat ~/temp.txt
Je suis un nouveau venu dans Vim mais, pour copier tout le texte dans le presse-papiers du système (par exemple, si vous souhaitez le coller dans un traitement de texte ou un autre éditeur de texte tel que gedit, mousepad, etc.), en mode normal:
ggVGy
ou plus simplement:
:% y
Comme suggéré, j'ai également installé vim-gtk et mis
set clipboard = unnamedplus
dans mon .vimrc
et tout fonctionne bien
Si vous souhaitez ne copier qu'une partie du texte, utilisez mode visuel (v), sélectionnez le texte que vous souhaitez copier et appuyez sur y.
Enfin, je suggère un programme de presse-papiers comme Clipman (mon préféré), Clipit, Parcellite ou similaire.
(J'utilise vim 8.0 dans Debian Stretch Xfce)
Pardonne-moi pour mon anglais! :-)
J'ai eu un problème parce que mon vim ne supportait pas presse-papiers:
vim --version | grep clip
-clipboard +insert_expand +path_extra +user_commands
+emacs_tags -mouseshape +startuptime -xterm_clipboard
J'ai installé vim-gnome (qui supporte le presse-papiers) puis vérifié à nouveau:
vim --version | grep clipboard
+clipboard +insert_expand +path_extra +user_commands
+emacs_tags +mouseshape +startuptime +xterm_clipboard
Maintenant, je peux copier et coller en utilisant "+ y et" + p respectivement.
Si vous ne souhaitez pas utiliser d'interface graphique pour vim et si vous préférez vous en tenir à l'émulateur de terminal, il peut y avoir une approche beaucoup plus simple à ce problème. Au lieu d'utiliser yank ou quelque chose comme ça, jetez d'abord un coup d'œil à la documentation du terminal que vous utilisez. Je me suis débattu avec le même problème (essayer d'utiliser + presse-papiers et xclip, etc.) et à la fin, il s'est avéré que dans mon émulateur de terminal, il suffisait d'appuyer sur Shift et de sélectionner le texte que vous souhaitez copier. C'est ça. Assez simple et pas besoin de jouer avec la configuration. (J'utilise urxvt en passant).
Pour certains claviers internationaux, vous devrez peut-être appuyer sur "+Space pour obtenir un "
.
Donc, dans ce cas, vous devrez appuyer sur "Space+y ou "Space*y
J'ai écrit une simple ligne dans mon fichier .vimrc pour que la copie fonctionne. J'espère que ça aide quelqu'un. Mon vim n’est malheureusement pas installé avec le support Clipboard, donc aucune de ces suggestions n’a fonctionné pour moi. Fondamentalement, collez cette ligne dans votre fichier .vimrc:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
Si vous souhaitez lire des détails sur ce que cela fait, vous pouvez en savoir plus sur mon blog
pour OSX, comme indiqué clairement dans les réponses 10342 ci-dessus, vous devez vous assurer que vim prend en charge la fonctionnalité de presse-papiers, a déclaré celui fourni en pré-livraison avec OSX NE prend PAS en charge le presse-papiers, et que si vous exécutez brew install vim
it travaillerait.
Sauf que l'exécution de vi vous obligera toujours à exécuter la version OSX pré-expédiée, pas celle que vous avez installée à partir de brew.
pour surmonter ce problème, j'ai simplement associé ma commande vim à la version brassée, et non à la version par défaut d'OSX:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
et maintenant je suis d'or
si vous vous connectez au système Unix via PuTTY, suivez les étapes ci-dessous pour copier le contenu d'un fichier.
Rien de ce qui précède n'a fonctionné pour moi sur mon ordinateur portable Windows.
Ctrl+C était bien pour copier .. mais j'avais besoin Shift+Insert coller !
(Une bonne raison de toujours avoir un ordinateur portable où Insert toujours accessible sans appuyer sur une touche secondaire)
selecting
avec l'aide de mouse
et right-click copy
a fonctionné dans mon cas.
Je ne voulais pas que les numéros de ligne soient inclus, donc je :set nonumber
avant copying
.
Dans mon cas, sélectionner du texte en surlignant (en cliquant et en faisant glisser) avec ma souris faisait passer vim en mode visuel.
Sur un mac de toute façon, la solution la plus simple consiste à utiliser fn + mouse click and drag
pour éviter d'entrer en mode visuel.
Si vous souhaitez éviter ce comportement par défaut, vous pouvez modifier votre vimrc.
Cela fait des mois que je lutte contre cela avec MacOsX à l’aide de raccourcis clavier. Je sais que la question ne concerne pas l’utilisation de shorts pour clavier. Mais cela pourrait aider quelqu'un avec le même souci.
J'ai trouvé que si vous décochez la case:
Vue -> Autoriser le rapport de la souris
depuis le menu Terminal, vous pourrez copier dans le presse-papiers en utilisant
command + c
encore.