web-dev-qa-db-ja.com

zshでiTerm2ウィンドウとタブのタイトルを変更する

ターミナルセッションのウィンドウタブにラベルを付けたいのですが。 OSXのiterm2でzshellを使用しています。ターミナルでウィンドウタブのラベルを動的に変更することは可能ですか?

51
bneil

zshに次のように入力して、iTerm2のウィンドウタイトルを設定できます。

_echo -ne "\e]1;this is the title\a"
_

自動化したい場合は、現在の時刻または作業ディレクトリの場合、zsh構成ファイルを編集して、precmd()関数のタイトルを次のように設定します。 _$PWD_。

_echo -ne "\e]1;$PWD\a"
_

precmd関数については、セクション_man zshmisc_の_SPECIAL FUNCTIONS_を参照してください。

enter image description here

49
Daniel Beck

私のために働くもの:

echo -e "\033];this is the title\007"

Mac OSXとiTermを使用している場合、iTerm2 ::

  • iTerm→設定→外観→ウィンドウとタブのタイトル→すべてのチェックを外す

Zshを使用している場合は、設定を編集する必要があります。通常、設定は~/.zshrcファイルにあります。設定を追加または編集して、この行が存在することを確認します。

DISABLE_AUTO_TITLE="true"
46

ITermの便利な機能の1つは、ウィンドウタイトルとタブタイトルを個別に設定できることです。 example of using tab & window title separately

# $1 = type; 0 - both, 1 - tab, 2 - title
# rest = text
setTerminalText () {
    # echo works in bash & zsh
    local mode=$1 ; shift
    echo -ne "\033]$mode;$@\007"
}
stt_both  () { setTerminalText 0 $@; }
stt_tab   () { setTerminalText 1 $@; }
stt_title () { setTerminalText 2 $@; }

これにより、接続しているホストをどのウィンドウですぐに確認でき、各タブのウィンドウタイトルにユーザーとCWDが表示されます。

39
Orangenhain

precmdがうまくいきます。ただし、一部のoh-my-zshテーマはウィンドウタイトルを混乱させます。セットする PR_TITLEBARを空の文字列に修正します。

set-window-title() {
  # /Users/clessg/projects/dotfiles -> ~/p/dotfiles
  window_title="\e]0;${${PWD/#"$HOME"/~}/projects/p}\a"
  echo -ne "$window_title"
}

PR_TITLEBAR=''
set-window-title
add-zsh-hook precmd set-window-title

また、環境設定->外観のiTerm2のタブ設定をいじることもお勧めします。

5
Chris Gaudreau

おそらくiterm2バージョン(3.3.3)に対しては、答えがどれもうまくいかなかったようです。

私はこれを見つけました: https://Gist.github.com/phette23/5270658#gistcomment-3020766

基本的に、他のすべての回答で述べられていることは何でも行うことができますが、Preferences > Profiles > General > Title -> Name (Job)も設定する必要があります

これでうまくいきました。

2
Nuno Gonçalves

export Prompt_COMMAND='echo -ne "\033]0;$PWD\007"'~/.bash_profileに追加するとうまくいきました。

https://Apple.stackexchange.com/a/90737/49605

1
michalzuber

受け入れられた回答は長い間私にとってはうまくいきましたが、現在iTerm2の最新バージョンでは壊れています。私が見つけた回避策は、Python APIを有効にし、次のようにタブ名を設定するスクリプトを作成することでした:

#!/usr/bin/env python3.7
import argparse

import iterm2

def get_args():
    parser = argparse.ArgumentParser(description='Set the tab name')
    parser.add_argument('name')
    return parser.parse_args()

ARGS = get_args()

async def main(connection):
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    if window is not None:
        tab = window.current_tab
        await tab.async_set_title(ARGS.name)
    else:
        # You can view this message in the script console.
        print("No current window")

iterm2.run_until_complete(main)

「tab_name.py」として保存され、次のように呼び出されます:

~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 ~/Library/ApplicationSupport/iTerm2/Scripts/tab_name.py "new tab name"

受け入れられた答えほどナイスでもエレガントでもありませんが、機能します。

1
Ian E