Tmux config फाइल को कैसे पुनः लोड करें, जिसने कई सत्रों को परिभाषित किया है?


9

मैं दो अलग-अलग सत्रों का उपयोग कर रहा हूं tmux, और मेरे पास निम्नलिखित प्रविष्टियां हैं /etc/tmux.conf:

set -g base-index 1

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

मैं standardनिम्न आदेश लागू करके सत्र शुरू करता हूं :

urxvtc -name 'tmux' -e bash -c 'tmux attach-session -t standard'

यदि कोई सत्र नहीं है, तो यह एक बनाता है, यदि कोई है, तो यह संलग्न होता है। जैसा कि आप देख सकते हैं कि मेरे पास दो खिड़कियां हैं, जिनमें से एक को 2 पैन में विभाजित किया गया है। जब मैं कॉन्फिग फ़ाइल को पुनः लोड कर रहा हूं, तो मुझे दूसरे सत्र से 2 अतिरिक्त विंडो मिलीं, और दोनों को preexisted में जोड़ा गया है। इसके अलावा, पिछली खिड़कियों को एक अतिरिक्त फलक प्राप्त हुआ था। दो अतिरिक्त पैन स्पष्ट हैं, उनमें से किसी में भी निष्पादित कमांड (htop) नहीं है।

क्या इस तरह से कॉन्फ़िगर फ़ाइल को पुनः लोड करने का एक तरीका है कि यह केवल संलग्न सत्र पर लागू होगा? या क्या मुझे सत्र का उपयोग करते समय कॉन्फ़िगर फ़ाइल को पुनः लोड करने के बारे में भूलना होगा, और नई सेटिंग लागू करने के लिए मुझे tmux kill-serverसत्र नए सिरे से उपयोग करना चाहिए ?

जवाबों:


5

एक आवरण बनाएँ

मुझे लगता है कि कस्टम सत्रों को सेट करने के लिए रैपर स्क्रिप्ट के कुछ रूप से आपकी आवश्यकताओं को सबसे अच्छा काम किया जाता है। इस एक के जवाब की तरह कुछ ।

यह कुछ इस तरह दिखेगा, लेकिन आपको इसे अपनी विशिष्ट आवश्यकताओं के लिए बदलना चाहिए।

#!/bin/bash

# test if the session has windows
is_closed(){ 
    sess=$1
    n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
    [[ $n -eq 0 ]]
}

# either create it or attach to it
if is_closed logi ; then
  tmux new -d -s logi -n cmd
  tmux neww -t logi -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
  tmux splitw -t logi:1 -v -p 50
  tmux selectw -t logi:2
  tmux selectp -t logi:1
fi
if is_closed standard ; then
  tmux new -d -s standard -n htop "htop"
  tmux neww -n cmd -t standard
  tmux splitw -t standard:2 -v -p 50
  tmux selectw -t standard:2 
  tmux selectp -t standard:1
fi

कॉन्फ़िगरेशन फ़ाइल को फिर से लोड करने के लिए

यदि आप tmux का उपयोग करते समय कॉन्फ़िगरेशन फ़ाइल में एक संपादन करते हैं, तो आप इसे चला सकते हैं

tmux source-file /path/to/conf

या, आप इसे एक कुंजी में बाँध सकते हैं .tmux.conf

bind r source-file ${HOME}/.tmux.conf \; display-message "source-file reloaded"

होम निर्देशिका कॉन्फ़िगरेशन

अंत में, आपको वास्तव में महत्वपूर्ण अनुकूलन नहीं जोड़ना चाहिए /etc/tmux.confक्योंकि यदि आप एक साझा प्रणाली का उपयोग करने की आवश्यकता है तो यह दूसरों के लिए अनुचित होगा। इसके बजाय, मेरा सुझाव है कि आप किसी भी अनुकूलन को जोड़ दें ~/.tmux.confक्योंकि यह आपकी व्यक्तिगत आवश्यकताओं के लिए स्थानीय और विशिष्ट है।


मुझे स्क्रिप्ट निष्पादित करने में एक त्रुटि मिली: [[: not found(7 वीं पंक्ति)
मिखाइल मोरफिकोव

1
@MikhailMorfikov यह एक अलग संस्करण होने के कारण हो सकता है। शीर्ष पंक्ति को बदलने का प्रयास करें #!/bin/bash
स्काइकुलरेटर

हां, यह काम करता है।
मिखाइल मोरफिकोव

1

आपको एक आवरण स्क्रिप्ट का उपयोग करने की आवश्यकता नहीं है, आप इसे source-fileकमांड के साथ कर सकते हैं ।

मैंने अपने .tmux.confदो टुकड़े कर दिए, और यह केवल उन स्रोत:

source-file ~/.config/tmux/options.conf
source-file ~/.config/tmux/session.conf

फिर, session.confफलक परिभाषाएँ शामिल हैं:

new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0

new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2 
selectp -t 1

और options.confकेवल विकल्प परिभाषाएँ शामिल हैं:

bind R source-file ~/.config/tmux/options.conf \; display-message "Config reloaded..."
set -g base-index 1

इस तरह, bind Rकेवल स्रोत options.confऔर सब कुछ पुनः लोड किया जा सकता है, लेकिन कोई नया पैन नहीं बनाया जाएगा।
एक छोटी खामी यह है कि यदि आप विंडो लेआउट बदलना चाहते हैं, तो आपको एक नया सत्र शुरू करने और छोड़ने की आवश्यकता है।


0

मैंने यह स्क्रिप्ट बनाई है । इसे tmuxinator, माणिक या अन्य की आवश्यकता नहीं है। यह सिर्फ एक बैश स्क्रिप्ट है, विन्यास योग्य है।

मैं mi config फाइल को कॉन्फ़िगर करता हूं जैसे:

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

मैं अपनी सभी परियोजनाओं को कॉन्फ़िगर कर सकता हूं। बाकी स्क्रिप्ट द्वारा किया जाता है:

#!/bin/bash

if [ -r config ]; then
    echo ""
    echo "Loading custom file"
    . config
else
    . config.dist
fi

tmux start-server

window=0
windownumber=-1

for i in "${combo[@]}"; do

    if [ $((window%2)) == 0 ]; then
        name=${i}
        ((windownumber++))
    else
        command=${i}
    fi

    if [ ${combo[0]} == "${i}" ]; then
        tmux new-session -d -s StarTmux -n "${name}"
    else
        if [ $((window%2)) == 0 ]; then
            tmux new-window -tStarTmux:$windownumber -n "${name}"
        fi
    fi

    if [ $((window%2)) == 1 ]; then
        tmux send-keys -tStarTmux:$windownumber "${command}" C-m
    fi

    ((window++))
done

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