Copie de texte en dehors de Vim avec set mouse = a enabled


232

Après l'activation set mouse=a, le texte copié à l'intérieur de Vim ne sera pas collé à l'extérieur de Vim. Quelqu'un connaît-il un moyen de résoudre ce problème?

Ici, la sélection de texte avec la souris active le mode visuel et désactive l' Copyoption dans le menu contextuel:

entrez la description de l'image ici


2
Si votre vim est compilé avec +clipboardet mouse=a, vous pourrez copier / coller depuis / vers vim sans utiliser le menu contextuel du terminal. Vous pouvez vérifier si clipboardest activé en utilisant vim --version.
Jérôme Pouiller

@Jezz vaut la peine de préciser que A) mouse=an'est pas une option de compilation, c'est quelque chose dans vimrc B) Lorsque vim a été compilé avec, +clipboardil vous permet de copier / coller quand il :set numberest activé , et sans copier / coller les nombres, bien que vous ayez peut-être encore à faire mappages C) Il n'est pas nécessaire de recompiler VIM eux-mêmes, il peut être activé dans le vim sur certains gestionnaires de paquets pris en charge par le système d'exploitation .. Sur osx, le vim de brew l'a bien que le vim par défaut d'osx ne le fait pas. Ma réponse mentionne ce re osx.
barlop

Peut-être que l'installation xselfonctionne pour vous aussi, vous pouvez sélectionner du texte avec l'éditeur ou avec la souris et ctrl+cappuyer sur pour copier le texte, comme c'est le cas pour neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi

Réponses:


426

Appuyez sur shifttout en sélectionnant avec la souris. Cela fera que la sélection de la souris se comportera comme si elle mouse=an'était pas activée.

Remarque: cette astuce s'applique également au "collage du bouton central": si vous souhaitez coller du texte vim qui a été sélectionné à l'extérieur, appuyez shiftsur tout en cliquant sur le bouton central. Assurez-vous simplement que le mode d'insertion est activé lorsque vous faites cela (vous pouvez également :set pasteéviter les effets inattendus).

OS X (mac): maintenez alt / option tout en sélectionnant ( source )


2
OK, c'est bien la solution. Mais que se passe-t-il si vous voulez sélectionner beaucoup de code qui est plus que sur votre écran? (alors vous devez faire défiler et sélectionner en même temps)
Ozkan

3
Il existe également une option pour utiliser la sélection de bloc en appuyant sur <kbd> ctrl </kbd> + <kbd> Maj </kbd> + bouton gauche de la souris pour démarrer la sélection de bloc. Le bouton central de la souris colle le contenu copié dans une autre fenêtre.
micrub

6
Si vous avez des numéros de ligne (comme le montre la capture d'écran), lors de la sélection à l'aide d'ALT sur un Mac OS X, les numéros de ligne sont également copiés. Il est préférable dans ce cas d'utiliser ALT + CMD lors de la sélection pour le mode de sélection de bloc afin d'éviter de sélectionner les numéros.
Aaron

16
Pour Mac Terminal, après OS X 10.11 El Capitan , la Fnclé est la bonne voie à suivre. C'est-à-dire, (avec mouse=aactiver) en sélectionnant du texte tout en Fnappuyant sur la touche, puis utilisez CMD + C pour copier et coller où vous voulez.
YaOzI

1
Je ne sais pas comment cette réponse a autant de votes positifs. Si vous avez activé la prise en charge de la souris pour éviter de copier les numéros de ligne, cette suggestion est totalement inutile.
Stelios Adamantidis

49

Utilisez ", +, yaprès avoir fait une sélection visuelle. Vous ne devriez pas utiliser la commande de copie du terminal de toute façon, car cela copie ce que le terminal voit au lieu du contenu réel. Voici ce que cela fait:

  • ", +indique à Vim d'utiliser le registre nommé +pour la prochaine suppression, yank ou put. Le registre nommé +est un registre spécial, c'est le registre du presse-papiers X11. (Sur d'autres systèmes, vous utiliseriez *plutôt, je pense, voir :help clipboardet :help x11-selection)
  • y est la commande yank, qui indique à Vim de placer la sélection dans le registre nommé précédemment.

Vous pouvez le cartographier comme ceci:

:vmap <C-C> "+y

Puis mettez en surbrillance quelque chose avec la souris et appuyez sur Control-Cpour le copier.

Cette fonctionnalité ne fonctionne que lorsque Vim a été compilé avec l' +xterm_clipboardoption. Courez vim --versionpour savoir si c'est le cas.


4
Ou peut-être en "*yfonction du système d'exploitation.
frabjous

Ça a marché! Cependant, la combinaison est assez complexe, 4 boutons en fait .. J'ai probablement besoin de mapper l'autre en utilisant la méthode "shift" de l'autre réponse.
lyuba

La cartographie fonctionne parfaitement bien aussi :) Maintenant, je ne sais pas laquelle des réponses de vous devrais-je marquer comme acceptée :)
lyuba

2
Pour moi, c'est une meilleure solution que la réponse acceptée car avec cette méthode, les numéros de ligne ne sont pas copiés.
Saulo Silva

Et alors +clipboard? Et qu'en est-il +clipboardavec xterm_clipboardoff?
barlop

18

Au lieu d'être set mouse=autilisé set mouse=rdans .vimrc


1
Mais il désactive le défilement
Makesh

3
Veuillez expliquer pourquoi. En un coup d'œil, cela semble fondamentalement la même chose que de désactiver complètement le mode souris, ce qui n'est pas le but de la question.
Mikel

@Mikel à droite, voir aussi ma réponse La réponse de Josh Lee peut aider
barlop

Malheureusement, cela copiera également les numéros de ligne s'ils sont activés.
vikin9

17

Sur OSX, utilisez fnau lieu de shift.


travaillé pour moi avec la optionclé qui est l' altéquivalent clé sur l'hôte MacOS. C'était un terminal distant sur debian9. n'a pas fonctionné en ajoutant l'un ou l'autre de set mouse=a/ set mouse=rà /etc/vim/vimrcdistance.
mrtipale

5

Dans Ubuntu, il est possible d'utiliser les liaisons copier-coller X-Term dans VIM (Ctrl-Shift-C & Ctrl-Shift-V) sur du texte mis en évidence à l'aide de la touche Maj.


4

Une autre option OSX-Mac consiste à décocher View->Allow Mouse Reporting(ou appuyez sur ⌘-R pour la basculer.) Cela vous permet de basculer entre l'interaction de la souris et la sélection de la souris, ce qui peut être utile lors de la sélection et de la copie / collage de quelques bits car vous n'avez pas pour maintenir une touche de modification pour le faire.

Remarque pour Multiline avec des numéros de ligne:

J'ai généralement des numéros de ligne activés, ce qui copiera également les numéros de ligne si vous sélectionnez plusieurs lignes. Si vous souhaitez copier plusieurs lignes sans les numéros de ligne, désactivez les numéros avec :set nonupuis vous pouvez :set nules réactiver une fois la copie terminée.


1

Vous pouvez utiliser :set mouse&dans la ligne de commande vim pour activer le copier / coller du texte sélectionné à l'aide de la souris. Vous pouvez ensuite simplement utiliser le bouton central de la souris ou shiftinsertle coller.


Ensuite, lorsque vous l'avez, :set numberil met en évidence les chiffres. Donc pas beaucoup de bien. Donc, vous défaites le bien fait parset mouse=a
barlop

1

Les paramètres de compilation avec lesquels vim a été compilé font partie du problème. vim --versionmontre ces derniers.

Dans OSX, le vim par défaut a -clipboard Mais vous avez besoin+clipboard

Sur osx, vous pouvez et apparemment devez généralement utiliser macvim. Vous pouvez le faire brew cask install macvim que l' on a +clipboard.

Eux, vous aurez deux vims.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

exécuter vim exécutera macvim 'cos /usr/local/bindevrait être avant /usr/bindans le chemin, bien que vous puissiez vérifier avec which vim.

exécuter vim (pour exécuter macvim), c'est bien mais vous voudrez peut-être mapper vi au cos de macvim, sinon exécuter vi reste sur le vim par défaut! Vous pouvez réécrire ou supprimer (avec rm) et recréer le lien vi sym, avec ln. Et pour ce faire sans erreur "opération non autorisée", vous devez désactiver (temporairement) SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim a +clipboard comme indiqué parvim --version

Voici un travail ~/.vim/vimrc avec juste les lignes requises.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

La clé de repère par défaut est la barre oblique inverse.

J'ai lu une suggestion que l'on devrait utiliser la touche leader .. (certainement le contrôle a de nombreuses clés déjà utilisées, donc la suggestion était de ne pas utiliser le contrôle. Je ne sais pas si cela s'applique à la touche de commande aussi, mais de toute façon).

Avec ce mappage mentionné, \cfera ce "+yqui copiera du registre connu sous le nom de +, dans le presse-papiers. Et\v collera à partir du registre appelé +.

Voilà donc un copier / coller qui fonctionne entre les fenêtres.

Un autre OS peut nécessiter "*plutôt que"+


Les deux vims l'ont fait -xterm_clipboard. Peut-être qu'un +xterm_clipboardserait bénéfique d'une manière ou d'une autre, mais peu importe cette solution.
barlop

0

Si vous utilisez, Putty session, il copie automatiquement la sélection. Si nous avons utilisé l'option "set mouse = a" dans vim, la sélection à l'aide de la touche Maj + glisser-déplacer sélectionne automatiquement le texte. Besoin de vérifier dans X-term.


0

em ... Continuez à appuyer Shiftpuis cliquez sur le bouton droit de la souris


0

J'ai accidentellement expliqué comment éteindre set mouse=a, quand j'ai relu la question et découvert que l'OP ne voulait pas l'éteindre en premier lieu. Quoi qu'il en soit, pour quiconque cherche à désactiver la souris ( set mouse=) de manière centralisée, je laisse une référence à ma réponse ici: https://unix.stackexchange.com/a/506723/194822


0

Maintenir le décalage tout en copiant et collant avec la sélection a fonctionné pour moi


C'est ce que dit la réponse acceptée . Pour remercier un utilisateur - une fois que vous avez une telle réputation, vous pourrez voter pour son message.
Wai Ha Lee

0

Ajoutez set clipboard=unnamedà votre.vimrc . Il utilisera donc le registre du presse-papiers '*' au lieu du registre sans nom pour toutes les opérations de coupure, de suppression, de modification et de mise (notez que cela n'affecte pas seulement la souris).

Le comportement du registre «*» dépend de votre plate-forme et de la façon dont votre vimcompte a été compilé (ou si vous utilisezneovim ).

Si cela ne fonctionne pas, vous pouvez essayer avec set clipboard=unnamedplus, mais cette option n'a de sens que sur les systèmes X11.


-3

En mode ESC, lorsque set mouse = a, sélectionnez le texte à l'aide de la souris. Cela activerait le mode visuel dans vim. Ensuite, vous pouvez appuyer sur 'y' pour extraire le texte sélectionné et sur 'p' pour le coller où vous le souhaitez. Cela ne se produit que dans vim.


non, cela ne fonctionnera pas lorsque vous collez en dehors de vim
barlop
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.