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.