Come copiare attraverso i terminali?


11

Sto usando il sistema Linux. Due vims sono aperti in due terminali. Ora vorrei copiare il testo da A a B. Un modo per farlo è selezionare il testo in A, utilizzare il mouse per copiare, quindi passare a B, nella modalità di inserimento, il comando <c-r>+incolla il testo.

Esiste un modo per eseguirlo senza usare il mouse? come "+yyin A, quando si passa a B o<c-r>+,? Ho esplorato un paio di combinazioni invano. E ho cercato "copia attraverso i terminali", ma non ho trovato nulla.

@statox utente suggerisce una soluzione con modalità visiva, cioè v$"+yin A, quando l'interruttore a B, o<c-r>+.

Esiste un modo semplice per copiare il testo in A senza entrare in modalità v? Certamente entrare in v-mode non comporta troppi tasti premuti, chiedo solo se esiste un modo migliore. Per esempio. se il cursore si trova al centro di una linea, yycopia l'intera linea (per registrarsi "), mentre 0v$yfa la stessa cosa con la pressione del tasto in più.

Oppure, la mia domanda può essere ridotta a se esiste un modo con un numero minore di tasti rispetto 0v$"+ya una copia tale che posso usare <alt-tab>o<c-r>+per incollare.


Qual è il tuo problema esatto? Sembra che tu abbia la soluzione: seleziona il tuo testo con la modalità visiva (perché dovresti usare il mouse?) Mettilo nel registro degli appunti con "+ye nell'altra istanza di vim metti il ​​registro degli appunti "+p. O duplicato di questo ?
statox

Non è necessario accedere alla modalità visiva per strappare qualcosa. Puoi seguire ycon un movimento ( :help motion.txt) o un oggetto ( :help object-select). Se esegui lo yanking e l'incollaggio su più istanze di Vim, potresti trovare tale impostazione clipboardda includere unnamedo unnamedplusutile. Vedere :help 'clipboard'. Quindi la copia tra istanze dovrebbe funzionare.
Garyjohn,

1
Il punto del mio commento non era la modalità visiva, in realtà ho difficoltà a capire il tuo problema: all'inizio ho pensato che fosse il fatto di copiare del testo da un terminale all'altro, ora sembra che si tratti di usare meno tasti come possibile fare uno strappo nel registro degli appunti. Se questo è il secondo caso, il commento di Garyjohn è rilevante.
statox

1
0v$è lo stesso di V. Ed è facile fare una mappatura per "+y: :nnoremap <Leader>y "+y. In modo che lo riduca a V\y.
Martin Tournoij,

@Carpetsmoker la tua soluzione è buona. Mi piacerebbe prenderlo come la soluzione ottimale se lo si incolla nella regione di risposta. Sembra che senza key map, il meglio che possiamo fare per la copia nella mia domanda è V"+y, 4 battute.
user3813057

Risposte:


9

Puoi verificare se Vim è realizzato con il supporto degli appunti con:

:echo has('clipboard')

Se l'output è 1, quanto segue dovrebbe essere sufficiente per raggiungere il tuo obiettivo:

"*y    in source Vim
"*p    in destination Vim

Puoi rendere tutto molto più semplice sincronizzando il registro degli appunti e il registro predefinito con questa impostazione nel tuo vimrc:

set clipboard^=unnamed

Se l'output di :echo has('clipboard')è 0, prendere in considerazione l'installazione di un Vim simile vim-gtko vim-gnome(il nome del pacchetto può differire da distro a distro).


1

Penso che la soluzione che hai già menzionato nella tua domanda sia quella corretta. Se vuoi ridurre il numero di sequenze di tasti, puoi semplicemente creare una mappa, ad es

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Vedi la seconda voce qui .


1

Per estendere la risposta di @ romainl, (con il supporto degli Appunti) puoi usare i registri condivisi con gli Appunti a livello di sistema.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

Eseguendo questi comandi, sei y Anking / copia / immagazzinare contenuti selezionati in registri, e p asting loro destinazione Vim-terminale. Questi due registri speciali +e *sono condivisi con l'ampia appunti di sistema (e quindi molti altri programmi come browser web, gedit etc). Il registro +è associato al buffer di copia / incolla ed *è associato al buffer di selezione (uno che inserisce una copia della selezione con un clic centrale su un campo di testo, ad esempio Ubuntu) e può essere incollato usando ctrl + v( ctrl + shift + vsu gnome-terminal).


1

1) Su Fedora utilizzo la seguente configurazione:

dnf install vim-X11

vim-X11 viene fornito con il supporto degli appunti - forse in altre distro è simile.

2) Impostare un alias nel mio .bashrc

alias vim="vimx"

3) In .vimrc:

set clipboard=unnamedplus

Ora il solito strappo in Vim va negli appunti di sistema e ogni Ctrl-C al di fuori di Vim può essere incollato in Vim.


0

Se si utilizza un Mac (OSX), è possibile installare bpcopy (utilizzando birra installare pbcopy --see http://brew.sh/ per maggiori dettagli). Quindi eseguire il comando seguente (riga di comando in forma lineare) senza toccare il mouse:

ESEMPIO:

1) Nel TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) È possibile passare al terminale # 002 (senza usare il mouse) utilizzando i tasti di scelta rapida integrati nell'applicazione del terminale OSX: command+i

3) In TERMINAL # 002 : Apri il nuovo file in vim

vi newfile

4) Metti vim in modalità insert coni

5) Inserisci il testo dagli Appunti con command+ V(per incollare dagli Appunti su un Mac)

6) Goditi il ​​resto della giornata!

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.