Contrairement aux autres éditeurs, vim stocke le texte copié dans son propre presse-papiers. Il m'est donc très difficile de copier du texte d'une page Web et de le coller dans le fichier de travail actuel. Il se trouve que je dois soit ouvrir gedit, soit le saisir manuellement.
Puis-je créer vim paste depuis et vers le presse-papiers du système?
Les registres "*
et "+
sont destinés au presse-papiers du système (:help registers
). Selon votre système, ils peuvent faire des choses différentes. Par exemple, sur les systèmes qui n'utilisent pas X11 comme OSX ou Windows, le registre "*
est utilisé pour lire et écrire dans le Presse-papiers du système. Sur les systèmes X11, les deux registres peuvent être utilisés. Voir :help x11-selection
pour plus de détails, mais fondamentalement, le "*
est analogue à la sélection de X11 PRIMAIRE (qui copie sélectionnez avec la souris et collez avec le bouton central de la souris) et "+
est analogue à la sélection de X11 PRESSE-PAPIERS (qui correspond au presse-papiers proprement dit ).
Si tout cela vous dépasse, essayez d'utiliser "*yy
ou "+yy
pour copier une ligne dans le Presse-papiers de votre système. En supposant que vous ayez les options de compilation appropriées, l’un ou l’autre devrait fonctionner. Vous voudrez peut-être remapper ceci en quelque chose de plus pratique pour vous. Par exemple, vous pouvez insérer vnoremap <C-c> "*y
dans votre ~/.vimrc pour pouvoir sélectionner visuellement et appuyer sur Ctrl+c taper dans le presse-papier de votre système.
Sachez que copier/coller depuis le presse-papiers du système ne fonctionnera pas si :echo has('clipboard')
renvoie 0. Dans ce cas, vim n'est pas compilé avec la fonction +clipboard
et vous aurez installer une autre version ou la recompiler. Certaines distributions linux fournissent une installation minimale de vim par défaut, mais généralement, si vous installez package vim-gtk
ou vim-gtk3
], vous pouvez obtenir les fonctionnalités supplémentaires.
Vous pouvez également consulter l’option 'clipboard'
décrite sous :help cb
. Dans ce cas, vous pouvez :set clipboard=unnamed
ou :set clipboard=unnamedplus
pour que toutes les opérations de suppression/suppression soient automatiquement copiées dans le Presse-papiers du système. Cela pourrait être un inconvénient dans certains cas où vous stockez quelque chose d'autre dans le presse-papiers, car cela le remplacera.
Pour coller, vous pouvez utiliser "+p
ou "*p
(encore une fois, selon votre système et/ou la sélection souhaitée) ou vous pouvez les mapper sur autre chose. Je les tape explicitement, mais je me trouve souvent en mode insertion. Si vous êtes en mode insertion, vous pouvez toujours les coller avec l'indentation appropriée en utilisant <C-r><C-p>*
ou <C-r><C-p>+
. Voir :help i_CTRL-R_CTRL-P
.
Il convient également de mentionner l'option paste
de vim (:help paste
). Cela met vim dans un "mode de collage" spécial qui désactive plusieurs autres options, vous permettant de coller facilement dans vim à l'aide de votre émulateur de terminal ou du raccourci de collage habituel du multiplexeur. Il vous suffit de taper :set paste
pour l'activer, de coller votre contenu, puis de taper :set nopaste
pour le désactiver. Vous pouvez également utiliser l'option pastetoggle
pour définir un code d'activation qui bascule le mode (:help pastetoggle
). Je recommande d'utiliser des registres au lieu de ces options, mais si elles sont encore trop effrayantes, cela peut être une solution de contournement pratique pendant que vous perfectionnez vos côtelettes vim.
Voir :help clipboard
pour des informations plus détaillées.
Vous pouvez copier dans vim par le raccourci gnome-terminal pour coller. Faire le fichier en mode insertion et utiliser
Ctrl.Shiftcertains __code__v.
Remember beforehand to
:set paste
to avoid messing with the indentation.
Sur mon système Linux, les registres +
et *
correspondent à une sélection X11, qui peut être collée à l'aide du bouton central de la souris. Lorsque :set clipboard=unnamed
et :set clipboard=unnamedplus
sont utilisés, les registres sont mappés dans le presse-papiers et peuvent être collés avec CTRL-V.
Les spécificités semblent dépendre quelque peu de la configuration et du système, donc votre kilométrage variera certainement. Cela devrait cependant vous amener dans la bonne direction.
Pour ma cette configuration fonctionne pour copier et coller
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
Ce sont les lignes dont vous avez besoin dans votre vimrc à cet effet:
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
Je pense que cette question mérite une réponse plus objective.
Entrée en mode coller
Quitter le mode Coller
Vous avez collé le texte et vous pouvez taper à nouveau.
presse-papier
Il existe un registre spécial pour stocker cette sélection, il s’agit du registre "*". Rien n’est inséré ici à moins que l’information concernant le texte sélectionné soit sur le point de changer (par exemple, si vous cliquez avec le bouton gauche de la souris quelque part), ou si une autre application souhaite coller le texte sélectionné. Le texte est ensuite placé dans le registre "*. Par exemple, pour couper une ligne et en faire la sélection actuelle/la placer sur le CLIPBOARD:
"*dd
De même, lorsque vous souhaitez coller une sélection à partir d'une autre application, par exemple en cliquant sur le bouton central de la souris, la sélection est d'abord placée dans le registre "*, puis" placée "comme tout autre registre. Par exemple, pour mettre la sélection (contenu du CLIPBOARD):
"*p
enregistre E354
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
Coller du presse-papier
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
Vérifier la prise en charge du presse-papier X11 dans le terminal
Lorsque vous souhaitez exécuter Vim dans un terminal, vous devez rechercher une version de Vim qui a été compilée avec le support du presse-papiers. Vérifiez la prise en charge du presse-papiers X11 à partir de la console, tapez:
% vim --version
Si vous voyez "+ xterm_clipboard", vous êtes prêt à partir.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Le serveur X conserve trois sélections, appelées:
PRIMAIRE, SECONDAIRE et CLIPBOARD
La sélection PRIMARY est généralement utilisée pour implémenter le copier-coller via le bouton central de la souris. Les sélections SECONDARY et CLIPBOARD sont moins fréquemment utilisées par les programmes d'application.
J'ai essayé les suggestions ci-dessus et aucune d'entre elles n'a fonctionné dans mon environnement. (Windows PuTTY clone sur ssh)
Quelques recherches supplémentaires sont apparues: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
L'un des commentaires suggérait d'utiliser SHIFT+INSERT
, qui permettait de coller du presse-papiers du bureau dans le tampon de Vim. Ctrl-C
travaillait déjà pour copier dans le presse-papiers du bureau à partir de Vim.
Je n'avais pas de presse-papiers, j'ai donc proposé cette solution alternative avec xsel:
Ajoutez à votre ~/.vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
Une note rapide pour les personnes dont l’installation de vim ne prend pas en charge les registres * et +. Il n'est pas nécessaire de télécharger une nouvelle installation de vim à coller dans le presse-papiers. Voici une méthode alternative:
1) Installez parcellite (un gestionnaire de presse-papiers avec une faible empreinte mémoire);
2) Dans votre fichier .vimrc, ajoutez les éléments suivants:
command Clip r !parcellite -c
3) Redémarrez vim.
Maintenant, lorsque vous tapez: Clip en tant que commande ex, le contenu du presse-papiers est collé au niveau du curseur. Vous pouvez également mapper la nouvelle commande sur une touche de fonction afin de pouvoir le faire en une seule frappe.
Cela fonctionne pour moi: Ctrl+Shift+V
Suite à la réponse de Conner, qui était excellente, mais C-R C-p +
et C-R C-p *
en mode insertion est un peu gênant. Idem "*p
et "+p
à partir du mode commande.
un gourou VIM a suggéré ce qui suit pour mapper C-v
à ce que C-r C-p +
fait.
Vous pourriez avoir
:inoremap <C-v> <C-o>"+p
pour le mode insertion uniquementsi vous vouliez vraiment écraser le mode visuel par blocs (non recommandé par lui, car le mode visuel est bon), vous pourriez avoir
map <C-v> "+p
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 --with-lua --with-override-system-vim
installer la version de vim:
brew install macvim --with-lua --with-override-system-vim
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.
La solution la plus simple, qui fonctionne également entre différentes machines Linux via ssh
, est la suivante:
Vérifiez si vim prend en charge le presse-papiers X-11: vim --version | grep clipboard
. S'il renvoie -clipboard
et -xterm_clipboard
, vous devez installer soit vim-gtk
ou vim-gnome
(gvim sur Arch Linux).
Ajoutez les lignes suivantes à votre .vimrc
:
set clipboard=unnamedplus set paste
ssh -Y machine
Maintenant, copier et coller devrait fonctionner exactement comme prévu sur une seule machine et sur différentes machines en utilisant uniquement y
pour yank et p
pour coller. NB modifier .vimrc
sur toutes les machines sur lesquelles vous souhaitez utiliser cette fonctionnalité.
Basé sur la réponse @ lis2, j'utilise une configuration plus simple qui ne forcera pas le mode insertion à la fin:
_" Copy and paste
if has('clipboard') && !has('gui_running')
vnoremap <C-c> "+y
vnoremap <C-x> "+d
vnoremap <C-v> "+p
inoremap <C-v> <C-r><C-o>+
endif
_
Notez que tout cela annule les mappages Vim par défaut:
v_CTRL-C
: arrêter le mode visuelv_CTRL-X
: soustraire [nombre] du nombrev_CTRL-V
: mode visuel par blocsi_CTRL-V
: insère le prochain non-chiffre littéralement, qui est également mappé sur _i_CTRL-Q
_En guise d'alternative, on peut utiliser des clés inspirées des verbes "yank", "delete" et "put" Vim: _<C-y>
_, _<C-d>
_ et _<C-p>
_. Ceux-ci ne remplaceraient qu'un seul mappage par défaut:
i_CTRL-P
: recherche en amont du mot clé pour la complétionSi vous utilisez d'abord une souris, faites
:set paste
Ensuite, right click mouse
et le contenu du tampon seront collés.
Les autres solutions sont bonnes si vous souhaitez modifier votre vimrc, etc ... Cependant, je voulais un moyen simple de copier from = vim à mon clavier système. C'est ce que je suis venu avec.
v
:
(l’écran affichera automatiquement :'<,'>
).y *
oy +
(selon votre système) pour transférer le texte sélectionné dans le Presse-papiers du système.En plus du paramètre :set clipboard=unnamed
, vous devez utiliser mvim -v
que vous pouvez obtenir avec brew install macvim
si vous utilisez vim sur Terminal.app sous Mac OS X 10.9. Vim par défaut ne supporte pas l'option presse-papier.
Ce dont vous avez vraiment besoin, c'est EasyClip . Il fera exactement cela et bien plus encore ...
Il peut également être utile de mentionner que, sur OSX utilisant Vim, vous pouvez sélectionner du texte avec la souris, Cmd-C pour copier dans le Presse-papiers du système OSX et le texte copié sera disponible dans le Presse-papiers en dehors de Vim.
En d’autres termes, OSX le traite comme s’il s’agissait d’une fenêtre normale, et c’est là que le bouton tant décrié Apple "Commande" est très utile.
B-30
J'ai rencontré ce problème sur un Macbook Pro mi-2017 exécutant vim
dans iTerm2
comme principal environnement de développement.
Comme d'autres réponses l'ont suggéré, j'ai exécuté vim --version
et constaté qu'il renvoie -clipboard
, ce qui signifie que la version de vim
fournie avec ma machine n'a pas été compilée avec l'option presse-papiers.
Le package homebrew
pour vim
semble compiler avec l'option clipboard
. Le correctif pour moi était donc le suivant:
brew install vim
set clipboard+=unnamed
à mon fichier ~/.vimrc
iTerm2
Avec Vim 8+ sous Linux ou Mac, vous pouvez désormais utiliser simplement le collage natif du système d'exploitation (ctrl+shift+V
sous Linux, cmd+V
sur Mac). N'appuyez pas sur i
pour le mode Insertion.
Il collera le contenu du presse-papiers de votre système d'exploitation, en préservant les espaces et les onglets sans ajouter d'auto-identification. C'est l'équivalent de l'ancienne méthode :set paste
, i
, ctrl+shift+V
, esc
, :set nopaste
.
Vous n'avez même plus besoin des fonctionnalités +clipboard
ou +xterm_clipboard
vim. Cette fonctionnalité est appelée "pâte entre crochets". Pour plus de détails, voir Désactivation du retrait automatique lors du collage de texte dans vim
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 copier.
Et "Space+p ou "Space*p coller.
Il y a deux façons simples de faire cela. Créez votre fichier en mode insertion et 1) appuyez sur le bouton du milieu (la molette de défilement) de votre souris, ou 2) Ctrl + Maj + V
Lorsque j'utilise mon vim Debian non intégré à Gnome (vim --version | clip # grep ne montre aucun support du presse-papiers), je peux copier dans le presse-papiers après avoir maintenu la touche Maj enfoncée et sélectionné le texte avec la souris, comme avec tout autre programme de malédictions. Comme je l'ai découvert d'après un commentaire de @Conner, c'est le terminal (gnome-terminal dans mon cas) qui désactive le compte rendu des événements de la souris lorsqu'il détecte ma pression sur Shift. Je suppose que les programmes basés sur curses peuvent recevoir des événements de souris après avoir envoyé une certaine séquence d'échappement au terminal.
Depuis vim 8 , un clic droit active le mode visuel par défaut. Cela empêche le copier-coller "normal" (appelez-le un "défaut par conception" https://github.com/vim/vim/issues/1326 ). Corrigez ça en faisant:
echo "set mouse-=a" >> ~/.vimrc
.
Quittez et redémarrez vim.
Si vous êtes sur Windows et que vous souhaitez coller le contenu du Presse-papiers du système à l'aide de p
, tapez cette commande.
:set clipboard = unnamed
Cela a résolu mon problème.