Bash + iTerm2では、タブに名前を付ける方法は?


176

iTerm2(ビルド1.0.0.20120203)では、通常、いくつかのタブを開きます。各タブには分割ペインがあり、リビジョン管理、コーディング、ファイルの管理、mysqlターミナルの作業など、特定の作業テーマに関するものです。通常、ワークフローで5つ以上のタブを切り替える必要があります。画面の内容を見て、どれがどれであるかを覚えたり、伝えるのが難しい場合があります。どういうわけかタブに名前を付けたいので、すばやく一見することで、どれがどれであるかをすぐに判断できます。これは可能ですか?



完全に重複しているわけではありません。では、現在実行中のアプリをタブタイトルの一部として追加する方法は?つまり、どのタブがemacs、mysqlなどを実行していますか?
qazwsx

1
つまり、すべてのタブのホストとユーザーが同じです。したがって、これらを使用してもタブは区別されません。
qazwsx

iTermの設定から現在のジョブ名表示したいということですか?リンクされたトピックは、ユーザー名またはホストに関するものではないことに注意してください。
ダニエルベック

右、どのプログラムが実行されているか、または各タブで実行されたかを示す指標を表示したいと思います。また、他の投稿で提供されているソリューションは、Bash + iTerm2では機能しません。
qazwsx

回答:


212

Macでiterm2を使用しているので、別のオプションはCmdI、単にヒットし、何かをタイプして、ヒットすることESCです。

ターミナルソリューションはこれよりも少し速いですが、ただ知らせたいだけです。


11
名前を変更したタブでリターンを発行するまで、これは一瞬動作します。
スチューウィー14年

15
@Stewie [設定]-> [プロファイル]-> [ターミナル]で、[ターミナルにウィンドウタイトルのレポートを許可する]のチェックを外します。
マックスカントール14

3
チェックされていません。タイトルの名前を変更します。
スチューウィー14

6
@SteveBennettそれは「テーマ」ではありません(実際には用語は「プロファイル」です)。CMD + Iコマンドは[現在のセッションを編集...]([表示]メニューの下)であるため、そのタブのプロファイルのインスタンスを変更しているだけです。Escapeを押すとウィンドウが閉じますが、そのウィンドウには「保存」ボタンがありません。
ミッドナイト

4
複数のペインを開いている場合はどうなりますか?タブ自体に完全な名前を付けるには、それぞれの名前を変更する必要がありますか?
theicfire

119

~/.bashrcが役立つように配置された次の機能を見つけました:

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

次に、次のようにbashプロンプトから呼び出すことができます。

> title I want a pony!

そして、それに応じてタブにタイトルが付けられます。


1
私はこれを試しましたが、まだ動作しません。この定義をに入れbash_aliases、ロードしました.profileif [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi)しかし、title dogタブのタイトルを「犬」に変えませんでした
qazwsx

2
+1-私は/ etc / profileに私のものを追加しました。それは私のエイリアスがあるところです...終わったらファイルを入手することを忘れないでください。注:これは端末でも機能します。
blak3r

3
非常に役立ちます。ポニーが欲しかった。そして、私は1つを得ました!
SoEzPz

1
私は.bash_profileに私のものを入れて再起動し、それは魅力のように機能しました。
C・ジョンソン

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個の最小化された端末がある場合に便利です

Macの世界への帽子のヒント


そのエクスポートコマンドでのエスケープは、何らかの理由(v5.0.7)で私のbashでうまく機能しませんでした。ここで私に効果がありました:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel

18

私はかなり前から上記と同様のソリューションを使用していましたが、視覚的に参照しやすいように色分けしたい十分なタブを使用しています。そこで、各タブで行っている作業の種類に基づいてタブのタイトル、バッジ、色を設定するユーティリティであるtabsetを作成しました。

例

nodeが必要ですが、現在では一般的にインストールされているプラ​​ットフォームです。インストールする:

npm install -g iterm2-tab-set

これはすごい!タブの色の自動設定が特に気に入っています。ありがとうございました!
アシュトッシュジンダル

1
うわー!これは素晴らしいツールです!
dmulvi

現在、受け入れられている回答(<kbd> Cmd </ kbd> <kbd> I </ kbd>に記載されている方法の代わりにこの方法を使用し、何かを入力して<kbd> ESC </ kbd>を
押し

but that is now a commonly installed platformHahaha.ha ... ha ......、待って、本気
偽の名前

はい、深刻です。開発者とDevOpsの人々(最近では端末アプリケーションの自然な対象読者)には、node.jsがインストールされています。または、簡単にインストールできます。そうでない/できない人は、bash / zsh / etc。ベースのアプローチにフォールバックすることを歓迎します。
ジョナサンユニス

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


現状のままで
マイケル

5

taylorstineの答えは本当に気に入っていますが、変数に依存する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
Michael

2

プロファイルを使用している場合(非常に便利です):[設定]-> [外観]-> [ウィンドウとタブのタイトル]:[プロファイル名を表示]にチェックマークを付けます。

画像

次のようになります。

メイン画像にリンクされたサムネイル


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

Max Cantorのコメントは私にとってはうまくいきました。


1

自動プロファイル切り替えバッジは、あなたが必要とするものにぴったり合っていると思います。

自動プロファイル切り替え iTerm2は、現在のパス、ホスト名、ユーザー名について知っている情報を使用して、プロファイルを変更できます。たとえば、異なるホストに接続すると、ウィンドウの背景色や端末の文字エンコードが変わる可能性があります。

バッジ 端末の右上に、現在のセッションに関する情報を示すバッジを配置できます。ユーザー名、ホスト名、または現在のgitブランチなどのカスタムデータを表示できます。

結果は次のようになります。

ここに画像の説明を入力してください


リンクされたページが変更されると回答が無効になる可能性があるため、回答の重要な部分を参照リンクから引用してください。
DavidPostill

0

絶対にわかりやすくするために、B Sevenの回答を少し拡張したいと思います。

私たちのほとんどは、リモートシェルではなくローカルシェル(たとえばssh上)にない場合でも、どのようにタブのタイトルを設定できるかを知りたいので、

ステップ1。 Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

ステップ2.各タブについて、 double click on the tab -> Session Title

これで、セッションタイトルで設定したものは何でも、そのままになります。


-2

Yuk、これらすべてのエイリアスと関数。より簡単なソリューション(rootの場合)、これをターミナルに貼り付けます:

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

または、パスまたはグローバルパスのどこかにファイル呼び出しのタイトルを作成し、EOFの間に2行を貼り付けます。


12
「すべてのそれらのエイリアスを持つYuk。」 誰も手で覚えたりタイプしたりすることはできません答えを入力します。
ダン

1
@Danはこれが素晴らしいと言っていませんが、単にtitlein というスクリプトを作成しているだけなので、覚えておく必要はありません/usr/bin
エミールベルジェロン

@EmileBergeron thx、あなた(私たち)は少数派のようです。答えはたった1行で、残りは怠け者向けです。
-Orwellophile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.