2011-12-12 8 views
13

Ho tre finestre:Come faccio a riordinare tmux windows quando ne viene cancellato uno?

1:zsh 2:vim* 3:htop 

Quando si elimina la finestra corrente (# 2), ho queste finestre sinistra:

1:zsh 3:htop 

Come posso fare in modo che li rinumera automaticamente come

1:zsh 2:htop 

Se ricordo correttamente, questo è il comportamento predefinito di GNU Screen. So che potrei sempre :swap-window, ma mi piacerebbe sapere se questo è possibile automaticamente.

+0

Questa sarebbe una domanda migliore per http://superuser.com o http://unix.stackexchange.com. – ziesemer

+2

Le patch per una funzionalità come questa sono state [pubblicate sulla mailing list * tmux-users *] (http://search.gmane.org/?query=renumber&group=gmane.comp.terminal-emulators.tmux.user), ma non sono stati incorporati nel codice principale. Una rapida ricerca di "tmux renumber windows" ha generato uno [script che esegue tale rinumerazione] (http://brainscraps.wikidot.com/tmux-renum), anche se dovresti invocarlo manualmente (da una shell o attraverso un vincolante tramite 'run-shell'). –

+4

L'ultimo * tmux * 1.7 include l'opzione di sessione 'renumber-windows' (mantiene i numeri di finestra senza spazi), e il comando' move-window -r' (esegue una rinumerazione una tantum di windows). Se vuoi numeri "gapless" per tutte le sessioni, allora puoi mettere 'set -g renumber-windows on' nel tuo file di configurazione (una volta che hai * tmux * 1.7). –

risposta

15

Facciamolo più semplicemente.

Se si utilizza tmux di seguito la versione 1.7, aggiungere la linea accanto al ~/.tmux.conf:

bind-key C-s run "for i in $(tmux lsw|awk -F: '{print $1}'); do tmux movew -s \$i; done" 

è possibile ordinare tutte le finestre, digitando PREFIX-KEY, quindi Ctrl +s.

Altrimenti, se si utilizza tmux versione 1.7 o superiore, come già tutti dicono, aggiungere la linea accanto al ~/.tmux.conf:

set-option -g renumber-windows on 
+0

L'opzione bind-key qui non funziona correttamente con tmux 1.6.La prima finestra viene sempre rinumerata alla fine e il resto viene spostato verso il basso, quindi le finestre si comportano come un elenco circolare, ruotando ogni volta che viene eseguito e potenzialmente riordinandole completamente. la risposta di chris sotto è molto più affidabile. – papercrane

1

Lo script bash di seguito (versione aggiornata di [1] per riflettere le modifiche in tmux API) riordina le sessioni tmux. Suggerisco di aggiungere questo come una funzione bash che puoi chiamare da qualsiasi shell.

# re-number tmux sessions                                                     
for session in $(tmux ls | awk -F: '{print $1}') ;do                                              
    inum=0                                                         
    for window in $(tmux lsw -t 0 | awk -F: '/^[0-9*]/ {print $1}') ;do                                         
     if [ ${window} -gt ${inum} ] ;then                                                 
      echo "${session}:${window} -> ${session}:${inum}"                                            
      tmux movew -d -s ${session}:${window} -t ${session}:${inum}                                         
     fi                                                         
     inum=$((${inum}+1))                                                    
    done                                                         
done 

[1] http://brainscraps.wikidot.com/tmux-renum

10

Dal tmux 1.7, è possibile digitare un solo comando per farlo:

tmux movew -r