रिकॉर्डर tmux विंडोज़


21

मैं कुशलतापूर्वक tmux में विंडोज को कैसे रीऑर्डर कर सकता हूं? उदाहरण के लिए, विंडो का यह सेट होना:

0:zsh  1:elinks  2:mutt  3:irssi  4:emacs  5:rss  6:htop

क्या मैं ले जाने के लिए क्या करना है जाएगा rssके बीच करने के लिए elinksऔर muttसाथ समाप्त,:

0:zsh  1:elinks  2:rss  3:mutt  4:irssi  5:emacs  6:htop

मुझे पता है कि move-windowएक अभी तक अप्रयुक्त सूचकांक में एक खिड़की को स्थानांतरित करने के लिए कैसे उपयोग किया जाए, और मैं इसे प्राप्त करने के लिए उनमें से एक श्रृंखला का उपयोग कर सकता हूं - लेकिन, जाहिर है, यह बहुत थकाऊ है।


1
यह SU क्यू एंड ए शो क्या आप के लिए पूछ रहे हैं: superuser.com/questions/343572/how-do-i-reorder-tmux-windows
SLM

जवाबों:


38

swap-window आपको मदद कर सकते हैं:

swap-window -t -1

यह वर्तमान विंडो को एक स्थिति से बाईं ओर ले जाता है।

से आदमी tmux :

swap-window [-d] [-s src-window] [-t dst-window]
             (alias: swapw)
This is similar to link-window, except the source and destination windows are swapped. 
It is an error if no window exists at src-window.

आप इसे एक कुंजी से बांध सकते हैं:

bind-key -n S-Left swap-window -t -1
bind-key -n S-Right swap-window -t +1

तब आप उपयोग कर सकते हैं Shift+Leftऔर Shift+Rightवर्तमान विंडो स्थिति को बदल सकते हैं ।


लेकिन मुझे अभी भी swap-windowआदेशों की एक श्रृंखला (तीन उदाहरण के मामले के लिए) करनी होगी-सही?
इगोर

@ शक्ति: हाँ। दूसरा तरीका, आप कर सकते हैं swap-window -s 2 -t 5। विंडो नंबर 5 के साथ यह स्वैप विंडो नंबर 2
cuonglm

सही- लेकिन मैं अन्य सभी खिड़कियों के क्रम को अक्षुण्ण रखना चाहता हूं, इसलिए '# 2' और '# 5' खिड़कियों की 'सरल' अदला-बदली मेरे लिए नहीं है। मैं पहले से ही swap-windowकमांड के बारे में जानता था, लेकिन पिछली / अगली विंडो को लक्षित करने के लिए -/ +उपसर्गों के बारे में नहीं जानता था ।
इगोर

नए tmux संस्करणों में परिवर्तित व्यवहार को संबोधित करने के लिए unix.stackexchange.com/a/525770/12497 देखेंswap-window
स्टीवन लू

2

स्वीकृत और उच्चतर उत्तोलन का उत्तर सही है, हालाँकि हाल के tmux संस्करणों में व्यवहार स्वैप-विंडो कमांड को आपको एक ही विंडो पर नहीं रखने के लिए देखता है। तो यह अनजाने में काम करता है, आपकी सक्रिय खिड़की उस दिशा में स्वैप हो जाएगी लेकिन आप उसी स्लॉट में रहेंगे!

उस समस्या को ठीक करने के लिए, केवल बाइंड को उसका अनुसरण करने के लिए बढ़ाएँ। मेरे tmux config से उदाहरण के लिए:

bind -n C-S-Left { swap-window -t -1; previous-window }
bind -n C-S-Right { swap-window -t +1; next-window }

1

यहाँ बैश फ़ंक्शन में लिपटे एक काम कर समाधान है।

list=$(tmux lsw -F '#I');                           # for shift left, could be moved inside function
list=$(tmux lsw -F '#I'); list=$(echo $list|rev);   # for shift right, list reversed
shift_tmux_window_range() {  # depend on `list`
    local started=0 beg=$1 end=$2
    for i in $list; do
        if (($i == $beg)); then
            started=1; h=$beg; tmux linkw -s $beg && tmux unlinkw -t $beg;
        elif (($i == $end)); then
            tmux movew -d -s $i -t $h; tmux movew -d -t $end; break;
        elif [ $started = 1 ]; then
            tmux movew -d -s $i -t $h; h=$i;
        fi;
    done
}

shift_tmux_window_range 5 2

बोनस: यदि वर्तमान सक्रिय विंडो प्रभावित नहीं होती है तो उसी विंडो में रहें।


प्रतिभाशाली! धन्यवाद।
अलेक्जेंडर बर्ड

-1

यदि tmuxसंस्करण 1.7 या उच्चतर है

move-window -r

या

set-option -g renumber-windows on

में .tmux.confस्वचालित रूप से कर रही है, भविष्य में के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.