बैश + iTerm2 के साथ, टैब का नाम कैसे दें?


176

ITerm2 (बिल्ड 1.0.0.20120203) में, मैं आम तौर पर कई टैब खोलता हूं, जिनमें से प्रत्येक में विभाजन पैन हैं, और काम का एक विशेष विषय है, उदाहरण के लिए संशोधन नियंत्रण, कोडिंग, फाइलों का प्रबंधन, mysql टर्मिनल कार्य। मुझे आमतौर पर अपने कार्य प्रवाह में 5 या अधिक टैब के बीच स्विच करने की आवश्यकता होती है। यह कभी-कभी याद रखना या बताना कठिन होता है, जो स्क्रीन की सामग्री को देखकर होता है। मैं किसी तरह टैब का नाम देना चाहूंगा, इसलिए मैं जल्दी से बता सकता हूं कि कौन सी चीज जल्दी से दिखती है। क्या यह संभव है?



पूरी तरह से नकल नहीं। तो टैब शीर्षक के एक भाग के रूप में वर्तमान में चल रहे ऐप को कैसे जोड़ा जाए? यानी कौन सा टैब emacs, mysql, आदि चल रहा है?
क़ज़वेक्स

1
यानी मेरे सभी टैब में एक ही होस्ट और उपयोगकर्ता है। इसलिए उन का उपयोग करने से मेरे टैब अलग नहीं होंगे।
क़ज़वेक्स

आपका मतलब है कि आप iTerm की प्राथमिकताओं से वर्तमान नौकरी का नाम दिखाना चाहते हैं? ध्यान दें कि लिंक किया गया विषय उपयोगकर्ता नाम या होस्ट के बारे में नहीं है।
डैनियल बेक

सही, मैं कुछ संकेत दिखाना चाहता हूं कि प्रत्येक टैब में कौन सा प्रोग्राम चल रहा है या चलाया गया था। इसके अलावा, अन्य पोस्ट में दिया गया समाधान Bash + iTerm2 के लिए काम नहीं करता है।
२०:३२ पर क़ाज़ेविक्स

जवाबों:


212

चूंकि आप एक मैक पर iterm2 का उपयोग कर रहे हैं, दूसरा विकल्प यह है कि आप बस हिट कर सकते हैं CmdI, कुछ टाइप कर सकते हैं और हिट कर सकते हैं ESC

टर्मिनल सॉल्यूशन इससे थोड़ा तेज है, लेकिन आपको बताना चाहता है।


11
यह एक दूसरे के लिए तब तक काम करता है जब तक कि मैं उस टैब पर रिटर्न जारी नहीं करता जिसका मैंने नाम बदला है।
स्टिवे

15
प्राथमिकता में @Stewie -> प्रोफाइल -> टर्मिनल, "विंडो शीर्षक की रिपोर्ट करने के लिए टर्मिनल की अनुमति दें" को अनचेक करें।
मैक्स कैंटर

3
यह अनियंत्रित है। यह अभी भी नाम बदल देता है।
स्टीवी

6
@SteveBennett यह "थीम" नहीं है (वास्तव में शब्द "प्रोफ़ाइल" है); CMD + I कमांड "वर्तमान सत्र संपादित करें ..." (दृश्य मेनू के तहत) है, इसलिए यह प्रोफाइल के उस टैब का उदाहरण बदल रहा है। हिटिंग एस्केप बस खिड़की को बंद कर देता है, जिसकी जरूरत है क्योंकि उस विंडो में उस पर "सेव" बटन नहीं है।
आधी रात को

4
यदि आपके पास कई पैन खुले हैं तो क्या होगा? क्या आपको टैब को पूरी तरह से नाम देने के लिए प्रत्येक का नाम बदलना होगा?
Theicfire

119

मुझे निम्न कार्य मिला है, मेरे ~/.bashrcसहायक के लिए रखा गया है :

function title {
    echo -ne "\033]0;"$*"\007"
}

तब मैं इसे अपने बैश प्रॉम्प्ट से इस प्रकार कह सकता हूं:

> title I want a pony!

और मेरे टैब के अनुसार शीर्षक मिलता है।


1
मैंने यह कोशिश की, लेकिन यह अभी भी काम नहीं करता है। मैंने इस परिभाषा को रखा है bash_aliases, और इसे लोड किया है .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi) लेकिन तब title dogटैब शीर्षक को "कुत्ते" में नहीं बदल दिया
qazwsx

2
+1 - मैंने खदान को / etc / प्रोफाइल में जोड़ दिया, बस यही कारण है कि जहाँ मेरा एलियास है ... आपके द्वारा किए जाने के बाद फ़ाइल को स्रोत करना न भूलें। नोट: यह टर्मिनल में भी काम करता है।
19

3
बहुत उपयोगी। मुझे एक टट्टू चाहिए था; और मैं एक हो गया!
सोइज़पेज़

1
मैंने अपना .bash_profile में डाला, फिर से शुरू किया और यह एक आकर्षण की तरह काम किया।
सी जॉनसन

1
यह सोचकर कि यह काम नहीं करता है क्योंकि आपका कमांड प्रॉम्प्ट तुरंत इसे वापस बदल देता है। कोशिश करो title dog && sleep 5और आप देखेंगे कि यह काम करता है। इस पते पर @schpet से जवाब नोट करें
मिखाइल

45

अपने टैब या विंडो का शीर्षक सेट करने के लिए यह कमांड चलाएँ:

export PROMPT_COMMAND='echo -ne "\033]0;YOUR NAME HERE\007"'

मैंने ~/.bash_profileअपने घर डीर के सापेक्ष वर्तमान निर्देशिका को सूचीबद्ध करने के लिए मेरे साथ निम्नलिखित को जोड़ा है :

export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'

उपयोगी है जब आप अपनी गोदी में 100 न्यूनतम टर्मिनलों है

टोपी टिप मैक दुनिया के लिए


उस निर्यात कमांड पर भागने से किसी कारण (v5.0.7) के लिए मेरी बैश पर काफी काम नहीं हुआ, यहाँ मेरे लिए क्या काम किया गया है:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
माइक फोगेल

18

मैं काफी समय से ऊपर के समान समाधानों का उपयोग करता था, लेकिन मैं पर्याप्त टैब का उपयोग करता हूं जो मैं भी चाहता हूं कि उन्हें आसान दृश्य संदर्भ के लिए रंग-कोडित किया जाए। इसलिए मैंने टैबसेट , व्हॉट टैब शीर्षक, बैज, और रंग सेट करने के लिए एक उपयोगिता के आधार पर काम किया, जो मैं प्रत्येक टैब में कर रहा हूं।

उदाहरण

इसके लिए नोड की आवश्यकता होती है , लेकिन यह अब एक सामान्य रूप से स्थापित प्लेटफ़ॉर्म है। स्थापित करने के लिए:

npm install -g iterm2-tab-set

यह कमाल का है! मैं विशेष रूप से टैब रंग की ऑटो सेटिंग से प्यार करता हूं। धन्यवाद!
आशुतोष जिंदल

1
वाह! यह एक महान उपकरण है!
dmulvi 18

मैं वर्तमान में इस विधि का उपयोग स्वीकार किए गए उत्तर में वर्णित (<kbd> Cmd </ kbd> <kbd> I </ kbd>) के बजाय करता हूं, कुछ टाइप करता हूं, और <kbd> ESC </bd>) हिट करता हूं
qazwsx

but that is now a commonly installed platformहाहाहा… हा ……, रुको, क्या तुम गंभीर हो ?
नकली नाम

हां, गंभीर। डेवलपर्स और DevOps लोग- इन दिनों, टर्मिनल अनुप्रयोगों के प्राकृतिक लक्षित दर्शकों-नोड्स स्थापित हैं। या इसे आसानी से स्थापित कर सकते हैं। जो बैश / zsh / आदि-आधारित दृष्टिकोणों पर वापस आने का स्वागत नहीं करते / नहीं कर सकते हैं।
जोनाथन यूनिस

16

इस फ़ंक्शन को अपनी ~/.bash_profileफ़ाइल में जोड़ें और इसे काम करना चाहिए।

function title ()
{
    TITLE=$*;
    export PROMPT_COMMAND='echo -ne "\033]0;$TITLE\007"'
}

7

मैं यह पसंद है:

#setup terminal tab title
function title {
    if [ "$1" ]
    then
        unset PROMPT_COMMAND
        echo -ne "\033]0;${*}\007"
    else
        export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
    fi
}
title

यह आपको कस्टम नाम और आपके CWD के डिफ़ॉल्ट के बीच एक टैब के नाम को चालू करने देगा।

title -> आपका टैब शीर्षक होगा ~/YOUR_CWD/

title hey there -> आपका टैब शीर्षक होगा hey there


ध्यान दें कि जैसा है, यह क्लोबर iTerm खोल एकीकरण होगा।
माइकल

5

मुझे वास्तव में टाइलेस्टाइन का उत्तर पसंद है , लेकिन यह iTerm2 के शेल एकीकरण को तोड़ता है जो PROMPT_COMMANDचर पर निर्भर करता है । जब भी आप इसके साथ छेड़छाड़ करते हैं, तो आप इसे __bp_precmd_invoke_cmdवापस जोड़कर इसे ठीक करने के लिए टेलर के कोड को संशोधित कर सकते हैं PROMPT_COMMAND:

# iTerm2 shell integration
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"

# iTerm2 tab titles
function title {
    if [ "$1" ]
    then
        export PROMPT_COMMAND='__bp_precmd_invoke_cmd'
        echo -ne "\033]0;${*}\007"
    else
        export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/\~}\007";__bp_precmd_invoke_cmd'
    fi
}
title

3

मुझे माइकल का जवाब पसंद है ।

लेकिन अगर .iterm2_shell_integration.bashमौजूद नहीं है तो क्या होगा ?

यहाँ मेरा ले रहा है:

# iTerm2 shell integration
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"

# iTerm2 tab titles
function title {
  if [ "$1" ] ; then
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='iterm2_preexec_invoke_cmd' \
      || unset PROMPT_COMMAND
    echo -ne "\033]0;${*}\007"
  else
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007";iterm2_preexec_invoke_cmd' \
      || export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
  fi
}
title

1
ध्यान दें कि v3.1 में, iterm2_preexec_invoke_cmdबन गया है__bp_precmd_invoke_cmd
माइकल

2

यदि आप प्रोफ़ाइल के साथ काम कर रहे हैं (जो बहुत सुविधाजनक है): प्राथमिकताएँ -> सूरत -> खिड़की और टैब का शीर्षक: 'प्रोफ़ाइल का नाम दिखाएँ' पर टिक करें:

छवि

इस प्रकार से इसकी देखभाल होती है:

थंबनेल मुख्य छवि से जुड़ा हुआ है


2
Preferences -> Profiles -> Terminal
  uncheck Terminal may set Tab/Window title

मैक्स कैंटर की टिप्पणी ने मेरे लिए काम किया।


1

मुझे लगता है कि स्वचालित प्रोफ़ाइल स्विचिंग और बैज वास्तव में आपकी ज़रूरत के लिए डिज़ाइन किए गए हैं:

स्वचालित प्रोफ़ाइल स्विचिंग iTerm2 प्रोफाइल बदलने के लिए आपके वर्तमान पथ, होस्ट नाम और उपयोगकर्ता नाम के बारे में जानकारी का उपयोग कर सकती है। उदाहरण के लिए, विभिन्न होस्ट्स से कनेक्ट करते समय आपकी विंडो का बैकग्राउंड कलर या टर्मिनल का कैरेक्टर एन्कोडिंग बदल सकता है।

बैज आप वर्तमान सत्र के बारे में जानकारी दिखाते हुए अपने टर्मिनल के ऊपर दाईं ओर बैज लगा सकते हैं। यह आपके उपयोगकर्ता नाम, होस्टनाम, या वर्तमान गिट शाखा की तरह कस्टम डेटा भी दिखा सकता है।

तो परिणाम इस तरह हो सकता है:

यहां छवि विवरण दर्ज करें


कृपया संदर्भ लिंक (एस) से उत्तर के आवश्यक हिस्सों को उद्धृत करें, क्योंकि लिंक लिंक किए गए पृष्ठ (परिवर्तन) होने पर उत्तर अमान्य हो सकता है।
DavidPostill

0

मैं पूर्ण स्पष्टता के लिए बी सेवन के उत्तर का थोड़ा विस्तार करना चाहूंगा ।

चूँकि हम में से अधिकांश यह जानना चाहते हैं कि कोई व्यक्ति स्थानीय शेल में नहीं होने पर भी टैब का शीर्षक कैसे सेट कर सकता है, बजाय रिमोट शेल (जैसे ssh के) पर।

चरण 1। Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

चरण 2। प्रत्येक टैब के लिए, double click on the tab -> Session Title

अब, आप जो भी सत्र शीर्षक में निर्धारित करेंगे, वह इस प्रकार रहेगा।


-2

युक, उन सभी उपनामों और कार्यों। आसान समाधान (यदि आप जड़ हैं), इसे एक टर्मिनल में चिपकाएँ:

TARGET=/usr/bin/title
sudo tee "$TARGET" <<'EOF'
#!/usr/bin/env bash
echo -ne "\033]0;$*\007"
EOF
sudo chmod 755 "$TARGET"

या बस अपने पथ, या वैश्विक पथ में कहीं एक फ़ाइल कॉल शीर्षक बनाएं, और ईओएफ के बीच दो पंक्तियों को चिपकाएं।


12
"उन सभी उपनामों के साथ युक।" कोई भी उत्तर याद नहीं रहता है और न ही हाथ से टाइप किया जा सकता है।
दान

1
@ यह नहीं कह रहा है कि यह बहुत अच्छा है, बस यह याद रखने की कोई आवश्यकता नहीं है कि यह केवल एक स्क्रिप्ट बना रहा है जिसे titleअंदर बुलाया गया है /usr/bin
एमिल बर्जरॉन

@EmileBergeron thx, हालाँकि ऐसा लगता है कि आप (हम) अल्पमत में हैं। जवाब केवल 1 लाइन का था, बाकी आलसी लोगों के लिए है।
ऑरवेलोफाइल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.