it-swarm.it

Spostamento del riquadro tmux nella finestra

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

Vengo da schermo, dove posso passare al riquadro e quindi passare a Windows fino a quando non arrivo a quello desiderato; tmux non sembra consentire questo.

241
mrlanrat

Il comando per farlo è join-pane in 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.conf per 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
221
jasonwryan

join-riquadro è la risposta. Anch'io ho avuto problemi con i miei tentativi di usarlo sulla base della documentazione di tmux. Ho scoperto che il -t e -s switch sembrano accettare [session]:window e non [session:]window. Vale a dire che specificare la sessione è facoltativo, ma includendo : è 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 la tua chiave di associazione, seguita da) ...

:join-pane -s :1

È quindi possibile suddividerli con il riquadro di interruzione 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 ! e @ è proprio accanto ad esso e non è vincolato 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 "%%"'
bind-key [email protected] choose-window 'join-pane    -s "%%"'

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

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

Notare la -h fa impilare i riquadri in orizzontale (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 ritrovi 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!

167
Bruno Bronosky

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.

45
Joshua K

Legatura chiave

Di default, Ctrl+b! sarebbe break il riquadro attivo in una nuova finestra e passa ad esso.

Dove Ctrl + b è il valore predefinito prefisso per tmux .

Dettagli

Il comando tmux eseguito da questa chiave è break-pane (alias: breakp) come implementato in cmd-break-pane.c e associato come predefinito in key-bindings.c come visto in list-keys (alias: lsk) output del comando:

bind-key    -T prefix       !                 break-pane
15
user86041

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.

14
Bernhard T

Dopo aver esaminato le altre risposte e esaminato 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 i miei collegamenti minuscoli s/v per creare nuove divisioni verticali/orizzontali. Se qualcuno sa come selezionare i singoli riquadri anziché le finestre fammi sapere.

14
toupeira

Non è necessario modificare i collegamenti chiave.

Mentre il riquadro che desideri spostare ha lo stato attivo, digita Prefisso quindi :join-pane -t :1 dove 1 è qualunque sia il numero della finestra di destinazione nella stessa sessione. Puoi spostarlo in un'altra sessione anteponendone il nome come project:3. Per me join-pane tab-autocompletes from j.

Aggiungi un -h o -v passa al comando per impostare l'orientamento della nuova divisione creata nella destinazione, oppure vai su di essa e Prefissospace riorganizzare.

4
Walf