Bash + iTerm2 ile sekmeler nasıl isimlendirilir?


176

İTerm2'de (Build 1.0.0.20120203), genellikle her biri ayrı bölmelere sahip birkaç sekme açarım ve her biri belirli bir çalışma teması olan, örneğin revizyon kontrolü, kodlama, dosyaları yönetme, mysql terminal çalışması gibi birkaç sekme açarım. İş akışımda genellikle 5 veya daha fazla sekme arasında geçiş yapmam gerekir. Ekranın içeriğine bakarak hangisinin hangisi olduğunu hatırlamak veya söylemek bazen zor olabilir. Sekmeleri bir şekilde adlandırmak istiyorum, böylece hangisinin hızlı bir şekilde bakarak hızla olduğunu söyleyebilirim. Mümkün mü?



Tamamen çoğaltılmaz. Peki şu anda çalışan uygulamayı sekme başlığının bir parçası olarak nasıl ekleyebilirim? Yani hangi sekmede emacs, mysql, vb çalışıyor?
qazwsx

1
Yani tüm sekmelerimde aynı sunucu ve kullanıcı var. Yani bunları kullanmak sekmelerimi farklılaştırmayacak.
qazwsx

İTerm'in tercihlerinden mevcut iş ismini göster mi demek istiyorsun ? Bağlantılı konunun kullanıcı adı veya ana bilgisayar ile ilgili olmadığını unutmayın.
Daniel Beck

Doğru, hangi programın çalıştığını veya her sekmede çalıştırıldığını gösteren bir gösterge göstermek istiyorum. Ayrıca, diğer yazıda verilen çözüm Bash + iTerm2 için çalışmıyor.
qazwsx

Yanıtlar:


212

Bir mac üzerinde iterm2 kullandığınız için, başka bir seçenek de sadece vurabilir CmdI, bir şeyler yazabilir ve vurabilirsiniz ESC.

Terminal çözümü bundan biraz daha hızlı, ancak sadece size bildirmek istedim.


11
Bu, yeniden adlandırdığım sekmede bir dönüş yayınlayana kadar bir saniye kadar çalışır.
Stewie

15
@Stewie Tercihlerde -> Profiller -> Terminal, "Terminalin pencere başlığını bildirmesine izin ver" seçeneğinin işaretini kaldırın.
Max Cantor

3
İşaretli değil. Hala ünvanı yeniden adlandırıyor.
Stewie

6
@ SteveBennett "tema" değil (aslında terim "profil" dir); CMD + I komutu "Geçerli Oturumu Düzenle ..." dir (Görünüm menüsü altında), bu yüzden bu sekmenin profildeki örneğini değiştiriyor. Escape tuşuna basmak, pencerede bir "kapat" butonu bulunmadığı için gerekli olan pencereyi kapatır.
MidnightLightning

4
Birden fazla bölme açıksa ne olur? Sekmeyi tam olarak isimlendirmek için her birini yeniden adlandırmanız gerekiyor mu?
Theicfire

119

Aşağıdaki işlevi buldum, ~/.bashrcyardımcı olmak için benim yerime yerleştirdim :

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

Ardından bash istemimden aşağıdaki gibi çağırabilirim:

> title I want a pony!

Ve sekmem buna göre başlıklandı.


1
Bunu denedim ama hala çalışmıyor. Ben bu tanımı koydum bash_aliasesve içine .profileif [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fititle dog
yükledim

2
+1 - Benimkini / etc / profile ekledim, çünkü takma adlarımın olduğu yer ... bittikten sonra dosyayı almayı unutma. Not: Bu aynı zamanda terminalde de çalışır.
blak3r

3
Çok yararlı. Bir midilli istedim; ve bir tane var!
SoEzPz

1
Benimkimi .bash_profile içine koydum, yeniden başlattım ve bir cazibe gibi çalıştı.
C Johnson

1
İşe yaramadığını düşünenler bunun için komut istemi anında geri değiştirir. Deneyin title dog && sleep 5ve çalıştığını göreceksiniz. Bunu ele almak için @schpet'in cevabını not edin
Mikhail

45

sekmenizin veya pencerenizin başlığını ayarlamak için bu komutu çalıştırın:

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

Ana ~/.bash_profiledizine göre mevcut dizini daima listelemek için aşağıdakileri ekledim :

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

Bağlantı noktanızda simge durumuna küçültülmüş 100 terminal bulunduğunda faydalıdır

mac dünyasına şapka ucu


o dışa aktarma komutundan kaçmak bazı nedenlerden dolayı benim bashimde pek işe yaramadı (v5.0.7), işte benim için işe yarayanlar:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel

18

Uzunca bir süre yukarıdakine benzer çözümler kullandım, ancak kolay görsel referans için renk kodlu olmasını istediğim kadar sekme kullandım. Ben çırpılmış Yani tabset'ine , bir yardımcı ben her sekmede yapıyorum işin türüne göre sekme başlığı, rozet ve rengini ayarlamak için.

örnek

Düğüm gerektiriyor , ancak bu şimdi yaygın olarak kullanılan bir platform. Yüklemek:

npm install -g iterm2-tab-set

Bu harika! Özellikle sekme renginin otomatik ayarını seviyorum. Teşekkür ederim!
Ashutosh Jindal

1
Vaov! Bu harika bir araçtır!
dmulvi

Şu anda, kabul edilen yanıtta açıklananın yerine bu yöntemi kullanıyorum (<kbd> Cmd </kbd> <kbd> I </kbd>, bir şeyler yazın ve <kbd> ESC </kbd>
tuşlarına basın

but that is now a commonly installed platformHahaha.ha ... ha ...... bekle, ciddi misin?
Sahte Adı

Evet, ciddi. Geliştiriciler ve DevOps çalışanları - bugünlerde, terminal uygulamalarının doğal hedef kitlesi - node.js yüklü. Veya kolayca kurabilir. Yapmayan / yapamayanlar bash / zsh / etc.-temelli yaklaşımlara geri dönebilirler.
Jonathan Eunice

16

Dosyana bu işlevi ekleyin ~/.bash_profileve çalışması gerekir.

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

7

Bunu beğendim:

#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

Özel bir ad ile CWD'nizin bir varsayılanı arasında bir sekmenin adını değiştirmenize izin verir.

title -> sekme başlığınız olacak ~/YOUR_CWD/

title hey there -> sekme başlığınız olacak hey there


Olduğu gibi, bunun iTerm kabuk entegrasyonunu
Michael,

5

Taylorstine'in cevabını gerçekten seviyorum , ancak iTerm2'nin değişkene dayanan kabuk entegrasyonunu bozuyor PROMPT_COMMAND. Bunu düzeltmek için Taylor’un kodunu değiştirebilirsiniz __bp_precmd_invoke_cmd, PROMPT_COMMANDistediğiniz zaman geri ekleyin:

# 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

Michael'ın cevabını beğendim .

Peki ya .iterm2_shell_integration.bashyoksa?

İşte benim almam:

# 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 unutmayın iterm2_preexec_invoke_cmdhaline gelmiştir__bp_precmd_invoke_cmd
Michael

2

Profiller ile çalışıyorsanız (çok uygun): Tercihler -> Görünüm -> Pencere ve Sekme Başlıkları: 'Profil adını göster' i işaretleyin:

görüntü

Sonra böyle görünüyor:

Ana görüntüye bağlı küçük resim


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

Max Cantor'ın yorumu benim için çalıştı.


1

Otomatik Profil Değiştirme ve Rozetler tam olarak ihtiyaç duyduğunuz şey için tasarlandığını düşünüyorum :

Otomatik Profil Değiştirme iTerm2, profilleri değiştirmek için mevcut yolunuz, ana bilgisayar adınız ve kullanıcı adınız hakkında bildiği bilgileri kullanabilir. Örneğin, pencerenizin arka plan rengi veya terminalin karakter kodlaması farklı ana bilgisayarlara bağlanırken değişebilir.

Rozetler Terminalinizin sağ üst kısmına geçerli oturum hakkındaki bilgileri gösteren bir rozet koyabilirsiniz. Kullanıcı adınızı, ana bilgisayar adınızı ve hatta geçerli git dalı gibi özel verileri gösterebilir.

yani sonuç şöyle olabilir:

görüntü tanımını buraya girin


Bağlantılı sayfalar değişirse cevap geçersiz hale gelebileceğinden, lütfen cevabın temel kısımlarını referans bağlantılardan alıntılayın.
DavidPostill

0

B Seven'ın cevabını mutlak netlik için biraz uzatmak istiyorum .

Çoğumuz, uzak kabuk yerine (örneğin ssh) yerel kabukta olmasalar bile bir sekmenin başlığını nasıl ayarlayabileceğimizi bilmek isteriz.

Aşama 1. Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

Adım 2. Her sekme için double click on the tab -> Session Title

Şimdi, oturum başlığında ne ayarladıysanız, olduğu gibi kalır.


-2

Yuk, tüm bu takma isimler ve fonksiyonlar. Daha kolay çözüm (root iseniz), bunu bir terminale yapıştırın:

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

Ya da yolunuzun herhangi bir yerinde ya da genel yolunuzda bir dosya araması başlığı yapın ve iki satırı EOF arasına yapıştırın.


12
"Tüm bu takma adlarla Yuk." Girilen cevabı hiç kimse elle hatırlayamaz veya yazamaz.
Dan

1
Bu demiyorum @Dan sadece adında bir komut dosyası oluşturma beri hatırlamak gerek yoktur sadece, harika titleiçinde /usr/bin.
Emile Bergeron

@EmileBergeron thx, her ne kadar siz (biz) bir azınlık içindeyiz. Cevap sadece 1 satırdı, gerisi tembel insanlar içindir.
Orwellophile,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.