Copia il testo da un riquadro di tmux a un altro (usando vim)


133

Ho due file aperti in vim, ognuno in un riquadro di tmux. Vorrei copiare diciamo 10 righe da un file all'altro.

Come posso farlo senza usare il mouse Copy-> Paste?


2
Potresti coinvolgere tmux , ma ci sono generalmente modi più semplici. Entrambe le istanze di Vim si trovano sulla stessa macchina (locale?)? Di solito, vorrei semplicemente usare un file temporaneo per quello (cioè selezionare visivamente le linee :w /tmp/lines, quindi :r /tmp/linesnell'altra istanza). Oppure, se Vim sa come parlare agli appunti del sistema, è possibile utilizzare i registri +o *per evitare il file temporaneo.
Chris Johnsen,

Risposte:


194

Dovrai usare le scorciatoie di tmux. Supponendo che il collegamento al comando tmux sia l'impostazione predefinita: Ctrl+ b, quindi:

  1. Ctrl+ b, [Entra in modalità copia (?).

  2. Sposta all'inizio / fine del testo per evidenziare.

  3. Ctrlspace

    Inizia a evidenziare il testo (su Arch Linux). Quando ho compilato tmux dal sorgente su OSX e altri Linux, di Spacesolito funziona da solo. Il testo selezionato cambia i colori, quindi saprai se il comando ha funzionato.

  4. Sposta all'estremità opposta del testo da copiare.

  5. Alt+ wCopia il testo selezionato negli appunti di tmux. (Su Mac usa Esc+ w.)

  6. Sposta il cursore sul riquadro tmux opposto o su una finestra tmux completamente diversa. Posiziona il cursore nel punto in cui desideri incollare il testo appena copiato.

  7. Ctrl+ b, ]Incolla il testo copiato dagli appunti di tmux.

tmux è abbastanza bravo a mappare i comandi su scorciatoie da tastiera personalizzate.

Vedi Ctrl+ b, ?per l'elenco completo delle scorciatoie da tastiera impostate.


4
Grazie. Solo un sidenode: Alt + w non funzionava su Mac. Alt è stato mappato su Esc per impostazione predefinita. Quindi è Esc + w.
Karan,

11
se si utilizzano le screenscorciatoie: Ctrl + A [(entra in modalità copia), Space(inizia l'evidenziazione), Enter(termina l'evidenziazione), Ctrl + A ](incolla).
jfs

11
Vale la pena notare che "enter" funziona per me mentre alt + w non lo fa.
Elijah Lynn,

3
Come indicato in awhan.wordpress.com/2010/06/20/copy-paste-in-tmux , se si dispone di associazioni di tasti vi, il passaggio 5 deve essere sostituito con Enterchiave.
Ying Xiong il

3
Cosa succede se devo copiare e incollare in un editor di testo? Per qualche motivo non sembra che il testo selezionato sia ripreso anche dopo aver premuto 'Invio' dopo aver selezionato il testo.
ud

34

Sfortunatamente, non posso ancora aggiungere un commento alla risposta di Alex Leach, quindi includerò un addendum qui per gli utenti di Mac OS X:

  1. Enter Copia il testo selezionato

1
Grazie! Sono su Ubuntu Xenial, usando byobu/ tmuxcon tutte le impostazioni predefinite, ha funzionato, Alt + w no.
Andrea Zonca,

1
Questo non funziona su OS X Yosemite con tmux 2.0, né alt + w, né esc + w :(
weberc2

Funziona anche per me su Windows usando un terminale Zoc.
jdhao,

15

Se stai usando vim e tmux su macOS (testato su macOS 10.12.2, tmux 2.3):

(Supponiamo che la combinazione di tasti del prefisso tmux sia prefix. Il prefisso è ctrl+ bnelle impostazioni predefinite.)

  • Copia:
    1. Premere prefix+ [per accedere alla modalità copia.
    2. Utilizzare i tasti freccia per andare all'inizio / alla fine della selezione del testo.
    3. Premi ctrl+ space(se hai impostato ctrl+ spacecome prefisso, premi ctrl+ space+ spaceinvece)
    4. Utilizzare i tasti freccia per spostarsi sull'altro lato della selezione.
    5. Premi ctrl+ w.
  • Incolla:
    1. Premi prefix+ ]in modalità inserimento.

9

Mi sto collegando al mio server CentOS su un computer Windows utilizzando il client ssh del terminale ZOC . Ecco cosa funziona per me:

  • Entra in modalità copia: <prefix>+[
  • Inizia copia: <Space>
  • Copia testo: <Enter>
  • Incolla testo: <prefix>+]

2

È possibile utilizzare la scheda clip di sistema con "* y e" * p anziché le normali y e p.


1
Per usare gli Appunti di sistema devi usare "+2yy- copia due righe negli Appunti X11 "+dd- taglia la linea negli Appunti X11 "+p- incolla gli Appunti X11
Patryk

Devo digitare qualcosa prima di usare questi comandi?
Thomas Ahle

@ThomasAhle, no .. il suo letteralmente le doppie virgolette ( "), seguita da più (+) seguito da 2ys (y). Assicuratevi di essere in modalità normale. Se si è in modalità normale, si dovrebbe essere in grado di utilizzare h,j,k,lper spostare. Ho anche visto a volte sulla mia macchina virtuale Ubuntu, il registro "+" svanisce, per motivi sconosciuti. Per verificare che tu abbia il +registro, puoi digitare :rege controllare se c'è una stringa "+nella prima colonna.
alpha_989

Sì, eccolo, questa è la risposta. Molto più semplice degli altri suggeriti (usando tmux copia / incolla) e questo non infastidisce i numeri di riga. Ciò causerebbe problemi se si rimappasse lo standard ye pverso "+ye "+p?
Ryan,

1

Se hai vimaperto, è meglio usare il copia incolla vim per copiare il testo.

Tmux copy paste funzionerà, tuttavia ci sono molti svantaggi.

Innanzitutto, quando si copiano più righe di testo, è necessario selezionare più righe. Tmux copy paste in genere non capisce che vimha numeri di riga o ci sono segni nella grondaia di Vim (come numeri relativi / numeri assoluti). Di conseguenza, copierà anche quelli.

In secondo luogo, ho scoperto che se il testo ha una formattazione specifica per una determinata lingua e provi direttamente a copiare e incollare usando tmux per vim, la formattazione risulterà errata. Questo può essere evitato usando set paste!. Tuttavia, ciò richiede molto più lavoro.

Utilizzare "+yper copiare e "+pincollare

Vimfornisce nativamente un metodo per copiare incolla tra il buffer vim e gli appunti di sistema, usando "+yo "*y. Quindi incollare usando "+po "*p. Ciò eviterà di copiare i numeri relativi nella grondaia o altri segni casuali che non sono rilevanti per VIM


0

Un paio di opzioni per l'uso di vim poiché la sequenza di scorciatoie di tmux è un po 'lunga e trovo difficile ricordare

Come detto sopra, puoi usare "+ye "*ycopiare e poi "+pe "*prispettivamente incollare. Se vuoi che vim usi gli Appunti di default in modo da poterlo usare y/pdirettamente solo allora.

set clipboard=unamed "sets the default copy register to be *
set clipboard=unamedplus "sets the default copy register to be +

sorgente per il comando appunti: https://vi.stackexchange.com/questions/84/how-can-i-copy-text-to-the-system-clipboard-from-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.