presse-papiers vim et système

9

Je peux attraper un fichier, copier et coller du texte avec le bouton central ou l'insertion Maj.

Comment puis-je copier du texte dans vim et le coller depuis le presse-papiers du système?

arc-en-ciel
la source
parfois j'utilise sed -n5,10ppour imprimer les lignes 5-10 afin que je puisse plus facilement copier et coller sans que vim réagisse à la souris.
grantbow
en fait depuis l'intérieur de vim, la commande ressemble à:!sed -n 5,10p %
grantbow
Merci pour tous les commentaires et réponses. xclip est parfois utile, merci @ sergiy-kolodyazhnyy. Lorsque je travaille sur différentes machines, je n'ai parfois pas le contrôle sur quel vim est installé, mais avoir les instructions pour vérifier la réponse de @muru est utile, merci @ ashutosh-tripathy. Je dois utiliser les commandes de registre vim plus souvent pour m'en souvenir lorsque j'en ai besoin. Comme je l'ai mentionné dans la question ci-dessus, si je veux le faire rapidement et que le fichier est petit, la commande dans vim ressemble à:!cat %
grantbow

Réponses:

12

Vous devez avoir Vim avec les clipboardet xtermclipboardfonctionnalités compilées. Dans Ubuntu, ceux - ci ne sont disponibles qu'avec les packages de l' interface graphique (vim vim-gnome, vim-gtk, vim-athena, etc.).

Une fois que vous en avez installé un, vous pouvez copier (et coller) dans les registres du presse-papiers ( *et +). De ce post très instructif sur Vi et Vim :

Pour les systèmes basés sur X11 (c.-à-d. Linux et la plupart des autres systèmes de type UNIX ), il existe 2 presse-papiers indépendants les uns des autres:

  • PRIMARY - Il s'agit d'une copie sur sélection et peut être collée avec le bouton central de la souris.
  • CLIPBOARD - Ceci est copié avec (généralement) ^Cet collé avec ^V(c'est comme MS Windows).

Vim dispose de 2 registres spéciaux correspondant à ces presse-papiers:

  • *utilise PRIMARY; mnémonique: s goudron est s élisent (pour la copie-on- s élisent)
  • +utilise CLIPBOARD; mnémonique: CTRL + C (pour le raccourci clavier commun)

Pour copier dans un registre, vous faites précéder la commande de copie ( y) avec "et le nom du registre ( *, par exemple). "*y, puis cliquez avec le bouton central pour coller, ou "+yet ShiftInsertpour coller.

muru
la source
3

Une solution assez intéressante vient de cette question. Installez xclip, puis dirigez la sortie d'une commande vers xclip ( cat file | xclip -selection clipboardpar exemple), puis collez-la n'importe où (si c'est dans le terminal - utilisez Ctrl ShiftV ). Maintenant, il s'avère que vous pouvez réellement raccourcir cette commande xclip -sel clip, ce qui n'est pas exactement apparent à la lecture de la page de manuel ou des exemples.

Sergiy Kolodyazhnyy
la source
2
Une autre solution consiste à utiliser screen ou tmux avec ce plugin . Dans tous les cas, quelque chose doit être installé.
muru le
Quel est le presse-papiers réel utilisé sur le serveur x? Je n'ai rien trouvé dedans /dev, mais le texte se trouve toujours quelque part, non?
Sergiy Kolodyazhnyy
J'ai toujours supposé que ce serait en mémoire. Cela semble être une bonne question pour Unix et Linux .
muru le
3

J'ai eu un problème car mon vim ne supportait pas le 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 prend en charge 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 respectivement "+ y et" + p.

Ashutosh Tripathy
la source