Come copiare i dati tra diverse istanze di vim?


41

Se uso il primo VIM per copiare una riga (con yy), come posso incollare il VIM di un altro terminale (con p)? C'è qualche comando o impostazioni in grado di farlo? Posso copiare e incollare negli appunti di sistema globali?

So che sono possibili i seguenti modi, ma ne voglio uno più semplice:

  1. Non voglio uscire dal primo VIM e riaprire il secondo VIM.

  2. Non voglio usare una finestra separata (con :sp).

Risposte:


49

Innanzitutto è necessario installare una versione di vim abilitata per gli Appunti. Per accogliere utenti con ambienti non grafici (ad esempio utenti di Ubuntu Server) vime vim-tinynon agganciarsi a questa funzionalità. Ti consigliamo di installare GVim Installa GVim , che può essere lanciato graficamente o nel tuo terminale. GVim sostituirà il vimcomando.

Puoi trascinare il testo nel 'cut buffer' dal primo vim, quindi incollare il testo nel secondo vim. Per copiare nel buffer di taglio globale, utilizzare il +registro. Il "tasto consente di specificare quale registro utilizzare quando si esegue un'operazione di copia o incolla.

Nella prima vim, inserisci una riga nel +registro:

"+yy

quindi, per incollare dal +registro nel secondo vim:

"+p

Per ulteriori informazioni sui registri disponibili, consulta :help registers. Puoi anche usare "+pper incollare il testo copiato da qualsiasi altra fonte sul tuo sistema.


Per quanto valga la pena, se installi GVim (il pacchetto potrebbe essere chiamato qualcosa come vim-gnome), le voci del menu ti daranno molto spesso le scorciatoie da tastiera che invoceranno.
zpletan,

1
Non voglio installare Gvim. Come posso farlo in vim?
trusktr,

1
@trusktr in realtà funziona anche in vim. In questo Q&A dice che è necessario almeno Vim 7.3.74 (che significa Ubuntu 11.10 o successivo).
lumbric

questo in qualche modo non funziona se hai avviato un vim all'interno di tmux e un altro vim è iniziato normalmente all'esterno - qualche possibilità che tu sappia aggirare questo problema?
serup,

"*yy, "*pfunziona anche. se colpisci :reg, vedrai quel registro stellare
elquimista,

20

La migliore soluzione che ha funzionato per me (che non mi impone di cambiare le mie abitudini di associazione dei tasti) è qui: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- vim

basta mettere:

set clipboard=unnamedplus

nel tuo .vimrc.


In realtà avevo bisogno di aggiungere set clipboard=unnamedplusin combinazione con l'installazione di GVim. Tuttavia, sono stato in grado di utilizzare xfce4-terminal per Vim anziché l'attuale programma GVim.
jbrock,

9

Mi piace la soluzione di Bill e ho creato una mappatura:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

il primo in modalità visiva copia tutto in / tmp / vitmp e il secondo copia il contenuto da / tmp / vitmp nel file


soluzione semplice e semplice - alla vecchia maniera - grazie per me l'ha fatto
serup

Cosa devo digitare in Vim dopo averlo aggiunto a .vimrc?
Vitaly Zdanevich,

Devi impostare vim in modo da poter usare la chiave guida seguita da y per copiare, chiave guida seguita da p per incollare.
Samir Sadek,

1
Questo è quello che funziona. l'utilizzo "*ysembra non funzionare sui server
ospider

Oh mio. Ho cercato per ore questo problema usando vim in tmux nella finestra mobile. Il mio normale vimrc che aveva già unname / unnamedplus, NON funzionava in vim in tmux in docker. Né ha fatto nulla che ho trovato su Internet. Tuttavia, QUESTO sembra funzionare su TUTTE le macchine! Nella finestra mobile, su Mac e su Arch in modo nativo. Grazie!!
Tommy

5

Mi muovo tra le varie macchine della famiglia Unix e ho scoperto che la seguente sequenza funziona sempre per me:

Nella sessione vi di origine:

  1. Utilizzare ESC m aper contrassegnare la prima riga
  2. Utilizzare ESC m bper contrassegnare l'ultima riga
  3. Utilizzare :'a,'b w! xferper scrivere l'intervallo in un file scratch

Nella sessione di destinazione:

  1. Sposta il cursore sulla riga di inserimento
  2. Utilizzare ESC :r xferper leggere nel testo

So che non è carino ma funziona sempre per me!


2

In realtà è abbastanza semplice: installare una versione di vimtale supporto per appunti. in caso vimcontrario, procedi in uno dei seguenti modi:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Una volta installato, esegui vim. Puoi anche verificare che gli Appunti siano abilitati eseguendo:

 vim --version|grep clipboard

dovresti vedere +xterm_clipboard.


Questa risposta arriva al cuore del problema che è, la tua versione di Vim ha la funzione Appunti abilitata? In caso contrario, nessuna di queste altre risposte farà la differenza. Fai "vim --version" e cerca "+ appunti". Penso che + xterm_clipboard si applichi solo se si desidera il supporto degli appunti X11 desiderato, ma se si è su Ubuntu lo si desidera anche questo.
Ray

2

Probabilmente odierai tutti questa risposta. Negli anni '80 lavoravo su vi su una varietà di computer Unix e ho avuto la recente occasione di giocare su Linux.

La mia soluzione per tagliare e incollare sta usando Putty in esecuzione su Windows per accedere al mio box Linux.

Putty ti consente di copiare qualsiasi txt nella sua finestra semplicemente evidenziandolo. puoi quindi andare in un'altra finestra / sessione di Putty e fare clic con il tasto destro del mouse per incollare.

non potrebbe essere più facile. e ora c'è vim. peccato che non fosse tornato ai miei tempi, mi avrebbe aiutato a difendermi dalla mafia degli emacs.


1

Non sta usando esattamente yy, ma se selezioni il testo che vuoi copiare con il mouse (a volte potresti dover usare Shift- [trascina]), passa all'altra finestra del terminale ed esegui un [middle click] o Shift- [middle fai clic], il testo verrà inserito nel punto di inserimento corrente.

Funziona con la maggior parte dei programmi da riga di comando e GUI, non solo con vim.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.