Dengan Bash + iTerm2, bagaimana memberi nama tab?

176

Dalam iTerm2 (Build 1.0.0.20120203), saya biasanya membuka beberapa tab, yang masing-masing memiliki panel split, dan tentang satu tema kerja tertentu, misalnya kontrol revisi, pengkodean, mengelola file, pekerjaan terminal mysql. Saya biasanya perlu beralih antara 5 atau lebih tab dalam alur kerja saya. Terkadang sulit untuk mengingat atau mengatakan mana yang dengan melihat isi layar. Saya ingin memberi nama tab itu, jadi saya dapat dengan cepat mengetahui mana yang dengan cepat melirik. Apakah ini mungkin?

qazwsx
sumber
1
kemungkinan duplikat judul Change window dan tab iTerm2 di zsh
Daniel Beck
Tidak sepenuhnya duplikat. Jadi, bagaimana cara menambahkan aplikasi yang sedang berjalan sebagai bagian dari judul tab? Yaitu tab mana yang menjalankan emacs, mysql, dll?
qazwsx
1
Yaitu semua tab saya memiliki host dan pengguna yang sama. Jadi menggunakan itu tidak akan membedakan tab saya.
qazwsx
Maksud Anda, Anda ingin Tampilkan nama pekerjaan saat ini dari preferensi iTerm? Perhatikan bahwa topik yang ditautkan bukan tentang nama pengguna atau host.
Daniel Beck
Benar, saya ingin menunjukkan beberapa indikasi program apa yang sedang berjalan atau dijalankan di setiap tab. Juga, solusi yang diberikan di pos lain tidak bekerja untuk Bash + iTerm2.
qazwsx

Jawaban:

212

Karena Anda menggunakan iterm2 pada mac, opsi lain adalah Anda bisa menekan CmdI, mengetik sesuatu, dan menekan ESC.

Solusi terminal sedikit lebih cepat dari ini, tetapi hanya ingin memberi tahu Anda.

mawaldne
sumber
11
Ini berfungsi sebentar sampai saya mengeluarkan pengembalian pada tab yang telah saya ganti namanya.
Stewie
15
@Stewie Dalam Preferensi -> Profil -> Terminal, hapus centang "Izinkan terminal untuk melaporkan judul jendela".
Max Cantor
3
Itu tidak dicentang. Masih mengganti nama judul.
Stewie
6
@SteveBennett itu bukan "tema" (sebenarnya istilahnya adalah "profil") itu sendiri; perintah CMD + I adalah "Edit Sesi Saat Ini ..." (di bawah menu Lihat), jadi itu hanya mengubah instance tab dari profil itu. Memukul Escape hanya menutup jendela, yang diperlukan karena jendela itu tidak memiliki tombol "simpan" di atasnya.
MidnightLightning
4
Bagaimana jika Anda memiliki beberapa panel terbuka? Apakah Anda harus mengganti nama masing-masing untuk sepenuhnya memberi nama tab itu sendiri?
theicfire
119

Saya telah menemukan fungsi berikut, ditempatkan di saya ~/.bashrcuntuk membantu:

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

Maka saya dapat memanggilnya dari bash prompt saya sebagai berikut:

> title I want a pony!

Dan tab saya diberi judul sesuai.

Jason Sundram
sumber
1
Saya mencoba ini, tetapi masih tidak berhasil. Saya memasukkan definisi ini ke dalam bash_aliases, dan memasukkannya ke dalam .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi) Tapi kemudian title dogtidak mengubah judul tab menjadi "anjing"
qazwsx
2
+1 - Saya menambahkan milik saya ke / etc / profile hanya karena di situlah alias saya ... jangan lupa untuk mencari file setelah Anda selesai. Catatan: ini juga berfungsi di terminal.
blak3r
3
Sangat membantu. Saya ingin kuda poni; dan saya punya satu!
SoEzPz
1
Saya menaruh milik saya di .bash_profile, restart dan itu berfungsi seperti pesona.
C Johnson
1
Mereka yang berpikir itu tidak berhasil itu karena prompt perintah Anda segera mengubahnya kembali. Coba title dog && sleep 5dan Anda akan melihat bahwa itu berhasil. Perhatikan jawaban dari @schpet untuk mengatasinya
Mikhail
45

jalankan perintah ini untuk mengatur judul tab atau jendela Anda:

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

Saya telah menambahkan yang berikut ini ke saya ~/.bash_profileuntuk selalu daftar direktori saat ini relatif ke direktori home saya:

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

berguna ketika Anda memiliki 100 terminal minimal di dermaga Anda

ujung topi ke dunia mac

schpet
sumber
melarikan diri pada perintah ekspor itu tidak cukup bekerja pada bash saya untuk beberapa alasan (v5.0.7), inilah yang bekerja untuk saya:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel
18

Saya menggunakan solusi yang mirip dengan di atas untuk beberapa waktu, tetapi saya menggunakan cukup banyak tab yang saya juga ingin mereka diberi kode warna untuk referensi visual yang mudah. Jadi saya menyiapkan tabset , sebuah utilitas untuk mengatur judul tab, lencana, dan warna berdasarkan jenis pekerjaan yang saya lakukan di setiap tab.

contoh

Itu membutuhkan simpul , tetapi itu sekarang merupakan platform yang umum diinstal. Untuk memasang:

npm install -g iterm2-tab-set
Jonathan Eunice
sumber
Ini luar biasa! Saya terutama menyukai pengaturan otomatis warna tab. Terima kasih!
Ashutosh Jindal
1
Wow! Ini adalah alat yang hebat!
dmulvi
Saat ini saya menggunakan metode ini daripada yang dijelaskan dalam jawaban yang diterima (<kbd> Cmd </kbd> <kbd> I </kbd>, ketik sesuatu, dan tekan <kbd> ESC </kbd>)
qazwsx
but that is now a commonly installed platformHahaha.ha ... ha ......, tunggu, apa kamu serius ?
Nama Palsu
Ya serius. Pengembang dan DevOps orang — dewasa ini, target audiens alami dari aplikasi terminal — sudah menginstal node.js. Atau dapat menginstalnya dengan mudah. Mereka yang tidak / tidak dapat menerima kembali ke pendekatan berbasis bash / zsh / etc.
Jonathan Eunice
16

Tambahkan fungsi ini ke ~/.bash_profilefile Anda dan itu akan berfungsi.

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

Saya suka yang ini:

#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

Ini akan memungkinkan Anda beralih nama tab antara nama kustom dan default CWD Anda.

title -> judul tab Anda akan menjadi ~/YOUR_CWD/

title hey there -> judul tab Anda akan menjadi hey there

taylorstine
sumber
Perhatikan bahwa apa adanya, ini akan mengganggu integrasi shell iTerm.
Michael
5

Saya sangat suka jawaban taylorstine , tapi itu merusak integrasi shell iTerm2 yang bergantung pada PROMPT_COMMANDvariabel. Anda dapat memodifikasi kode Taylor untuk memperbaikinya dengan menambahkan __bp_precmd_invoke_cmdkembali ke PROMPT_COMMANDsetiap kali Anda mengutak-atiknya:

# 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
Michael
sumber
3

Saya suka jawaban Michael .

Tetapi bagaimana jika .iterm2_shell_integration.bashtidak ada?

Inilah pendapat saya:

# 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
pengguna1318024
sumber
1
Perhatikan bahwa dalam v3.1, iterm2_preexec_invoke_cmdtelah menjadi__bp_precmd_invoke_cmd
Michael
2

Jika Anda bekerja dengan Profil (yang sangat praktis): Preferensi -> Tampilan -> Judul Jendela & Tab: centang 'Tampilkan nama profil':

gambar

Begini tampilannya:

thumbnail yang ditautkan dengan gambar utama

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

Komentar Max Cantor bekerja untuk saya.

B Tujuh
sumber
1

Saya pikir Pengalihan Profil Otomatis dan Lencana dirancang persis untuk apa yang Anda butuhkan:

Pengalihan Profil Otomatis iTerm2 dapat menggunakan informasi yang ia ketahui tentang jalur Anda saat ini, nama host, dan nama pengguna untuk mengubah profil. Misalnya, warna latar belakang jendela Anda atau penyandian karakter terminal dapat berubah ketika menghubungkan ke host yang berbeda.

Lencana Anda dapat meletakkan lencana di kanan atas terminal Anda yang menunjukkan informasi tentang sesi saat ini. Ia dapat menampilkan nama pengguna Anda, nama host, atau bahkan data khusus seperti cabang git saat ini.

jadi hasilnya mungkin seperti ini:

masukkan deskripsi gambar di sini

lengxuehx
sumber
Silakan kutip bagian-bagian penting dari jawaban dari tautan referensi, karena jawabannya bisa menjadi tidak valid jika halaman yang tertaut berubah.
DavidPostill
0

Saya ingin sedikit memperluas jawaban B Seven untuk kejelasan absolut.

Karena sebagian besar dari kita ingin tahu bagaimana seseorang dapat menetapkan judul tab bahkan ketika mereka tidak di shell lokal, bukan di shell remote (misalnya lebih dari ssh).

Langkah 1. Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

Langkah 2. Untuk setiap tab, double click on the tab -> Session Title

Sekarang, apa pun yang Anda tetapkan dalam judul sesi, itu akan tetap apa adanya.

Krishna Gupta
sumber
-2

Yuk, semua alias dan fungsi itu. Solusi yang lebih mudah (jika Anda root), rekatkan ini ke terminal:

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

Atau cukup buat judul panggilan file di suatu tempat di jalur Anda, atau jalur global, dan rekatkan dua baris antara EOF.

Orwellophile
sumber
12
"Yuk dengan semua alias itu." Memasukkan jawaban tidak ada yang bisa mengingat atau mengetik dengan tangan.
Dan
1
@ Dan tidak mengatakan ini adalah besar, hanya bahwa ada tidak perlu mengingat bahwa sejak itu hanya menciptakan sebuah script yang disebut titledi /usr/bin.
Emile Bergeron
@EmileBergeron thx, meskipun sepertinya Anda (kami) termasuk minoritas. Jawabannya hanya 1 baris, sisanya untuk orang malas.
Orwellophile