Spostamento del riquadro tmux nella finestra


228

Come posso spostare un riquadro esistente in un'altra finestra in tmux quando ho più finestre e viceversa?

Vengo dallo schermo , dove posso passare al riquadro e quindi cambiare finestra fino a quando non arrivo a quello desiderato; tmux non sembra permetterlo.

Risposte:


209

Il comando per farlo è join-panein tmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

Per semplificare questo, ho questi vincoli nel mio .tmux.confper quello:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

Il primo prende il riquadro dalla finestra di destinazione e lo unisce all'attuale, il secondo fa il contrario.

È quindi possibile ricaricare la sessione di tmux eseguendo quanto segue all'interno della sessione:

$ tmux source-file ~/.tmux.conf

Sto provando questo metodo ma quando inserisco il tuo codice nel mio file .tmux.conf e faccio Ctrl-b, j, sembra che non accada nulla.
mrlanrat,

2
Hai bisogno di almeno 2 finestre aperte, con un paio di riquadri in ciascuna: quindi premi Prefix+se inserisci il nome della finestra al prompt per inviare il riquadro a quella finestra ...
jasonwryan

Non ho ancora avuto fortuna con questo, non succede nulla. Ho la sensazione che tmux non stia leggendo il file .tmux.conf perché non risponde affatto a Ctrl-b, j o ​​Ctrl-b, s. (queste sono le uniche 2 righe nel file di configurazione)
mrlanrat

7
@mrlanrat Trovo che devi aggiungere il prefisso al numero di finestra con due punti. Vedi la mia risposta qui sotto.
Bruno Bronosky,

1
A cosa si riferisce il '%%'?
Oligofren,

152

join-riquadro è la risposta. Anch'io ho avuto problemi con i miei tentativi di usarlo sulla base della documentazione di tmux. Ho scoperto che le opzioni -t e -s sembrano accettare [session]: window e non [session:] window. Vale a dire che specificare la sessione è facoltativo, ma includere: è obbligatorio. (Sto usando tmux 1.5)

Pertanto, per aggiungere un riquadro alla finestra corrente e posizionare la finestra 1 nel riquadro, il comando sarebbe (Ctrl-B o qualunque sia il tasto di associazione, seguito da) ...

:join-pane -s :1

È quindi possibile romperli appart con break-riquadro che per impostazione predefinita è: Ctrl-B! Se vuoi associarlo a una scorciatoia, ti suggerisco di NON sovrascrivere un'associazione predefinita come s, perché lungo la strada cercherai su Internet una risposta che coinvolga la sessione di scelta e non funzionerà sul tuo sistema. Si noti che il riquadro di interruzione è associato a! e @ è proprio accanto ad esso e non è associato a nulla per impostazione predefinita. Per questo motivo suggerisco questa associazione ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

In alternativa, per avere un selettore interattivo ...

bind-key @ choose-window 'join-pane -h -s "%%"'

In alternativa, per unirti sempre alla finestra visitata più di recente ...

bind-key @ join-pane -h -s !

NOTA: -hciò causa l'impilamento orizzontale dei riquadri (con una divisione verticale) rispetto al comportamento predefinito che è il contrario.

La cosa più importante è che IMPARARE qualunque cosa tu scelga di scorciatoia. Perché se lo imposti e lo dimentichi, rimarrai sconvolto quando ti ritroverai su un server straniero. E ammettiamolo, la cosa più importante che ti dà un multiplexer terminale sono sessioni affidabili su server remoti.

Questo completa la mia conversione da GNU Screen a Tmux. Non guarderò mai indietro.

Godere!


2
Mi mancava anche il ':' ... grazie per questo.
Rascalking,

Recentemente ho ottenuto 2 voti negativi su questo senza commenti che suggeriscono il perché. Questa è solo cultura scortese e anti-FOSS.
Bruno Bronosky,

1
la documentazione non parla affatto di due punti! Bello
JonnyRaa,

1
L'uso della sintassi del punto è ciò che mi ha aiutato, window.panead esempio, join-pane -s 1.0a spostare il riquadro 0 nella finestra 1 nella finestra corrente. Maggiori dettagli su maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras

A partire da tmux 2.1, :apparentemente non è più necessario (ad esempio, basta :join-pane -s 1). Forse quello era un bug nelle versioni precedenti
villapx

38

Penso che mi piace quello che ho usato per spostare meglio i riquadri nella propria finestra. Io uso

break-pane -t :

L'ho capito attraverso la sperimentazione, ma sembra funzionare molto bene. Puoi legarlo o alias facilmente, senza bisogno di script.


2
+1. Tendo a usarlo molto più spesso di join-pane.
Chris B,

14

Se non si desidera digitare l'identificatore del riquadro in un prompt, è anche possibile utilizzare

bind-key j "join-pane -s !"

che unirà l'ultimo riquadro / finestra attivo alla finestra corrente.


1
Che versione stai usando? Sto arrivando unknown command: join-pane -s !con 1.6.
paradroid

Usando 2.0 qui, ma solo mettere la linea nella conf senza virgolette sembra funzionare bene. bind-key j join-pane -s !
bkzland,

13

Dopo aver esaminato le altre risposte e esaminando la pagina man di tmux, per ora ho optato per i seguenti collegamenti:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

Ciò ti consentirà di selezionare in modo interattivo la finestra da unire e rispecchia le mie lettere minuscole s/ vrilegature per creare nuove divisioni verticali / orizzontali. Se qualcuno sa come selezionare i singoli riquadri anziché le finestre fammi sapere.


Questo è molto utile Grazie. Sfortunatamente i -ve -hnon creano rispettivamente "divisioni" verticali e orizzontali. Creano rispettivamente " riquadri impilati " verticali e orizzontali . (Vale a dire che i riquadri impilati verticalmente hanno una divisione orizzontale.) Quindi devi allenare il tuo cervello in quel modo. Inoltre -vè il valore predefinito, quindi lo tralasciavo e lo inserivo solo -hin modo che i tuoi ~/.tmux.confatti fossi un cheat sheet da guardare.
Bruno Bronosky,

Mi piace meglio delle altre risposte per "opposto al riquadro di interruzione". Avendo temporaneamente liberato un riquadro nella sua finestra, in seguito voglio rimandarlo a una delle finestre più vecchie e questo lo gestisce con grazia.
Stabledog,

13

Legatura chiave

Per impostazione predefinita, Ctrl+ b, !sarebbe rompere il riquadro attivo in una nuova finestra e passare ad esso.

Dove Ctrl+ bè il prefisso predefinito per .

Dettagli

Il tmuxcomando che esegue questa chiave è break-pane(alias:) breakpcome implementato cmd-break-pane.ce associato come predefinito in key-bindings.c come visto in list-keys(alias lsk:) output del comando:

bind-key    -T prefix       !                 break-pane

4

Non è necessario modificare i collegamenti chiave.

Mentre il riquadro che si desidera spostare ha lo stato attivo, digitare Prefisso, quindi :join-pane -t :1dov'è 1il numero della finestra di destinazione nella stessa sessione. Puoi spostarlo in un'altra sessione anteponendone il nome come project:3. Per me join-panetab-autocompletes di j.

Aggiungi -ho -vpassa al comando per impostare l'orientamento della nuova divisione creata nella destinazione, oppure vai su di essa e Prefisso + spaceper riorganizzare.

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.