iTerm2のタブのタイトルに現在いるディレクトリ名を表示する完全解説

zsh chpwd関数を利用して、iTerm2のタブのタイトルにカレントディレクトリを表示する

zshでは何か操作を行った時に呼び出される関数があります。

その中でchpwd関数はカレントディレクトリが変更した時に関数何のコマンドを実行できます。

このchpwd関数を使って、ディレクトリを移動するたびにタブのタイトルを変更します。

function chpwd() { echo -ne "\033]0;$(pwd | rev | awk -F \/ '{print $1}'| rev)\007"}

これを.zshrcに記述します。

vim ~/.zshrc

echo -ne

-eオプション エスケープ・コードを使用可能にする

-nオプション 出力文字の最後の改行をしない

-eオプションによってターミナルはバックスラッシュによる文字列(エスケープ・コード)を解釈することができるようになります。

上記の例では、"\033]0;"と"\007"がエスケープ・コードですね。

タブのタイトルに表示される文字列

ターミナルのタブに表示される文字列は

\033]0;\007で挟んだ文字列です

\033]0;[任意の文字列]\007

例えば、

echo -ne "\033]0;ほげ\007"

タブのタイトルが変更されていることがわかります。

この文字列をカレントディレクトリの文字列にすれば目的達成です。

フルパスを取得して、カレントディレクトリの文字列を抜き出す

pwdは現在のディレクトリのフルパスを表示します。

pwdの出力結果が"/home/yamada/program"だとすると、

revは文字列をひっくり返すコマンドです。

pwd | revの出力結果は

margorp/adamay/emoh/

になります。

awkで文字列を操作します。

\/ で"/"という文字で文字列を切ります。

この例では、$1=margorp, $2=adamay, $3=emohが入ります。

print $1でmargorpが表示されます。

pwd | rev | awk -F \/ '{print $1}'

margorp

それをさらにrevで文字列を反転させているわけです。

pwd | rev | awk -F \/ '{print $1}' | rev 

program

となります。

まとめ

function chpwd() { echo -ne "\033]0;$(pwd | rev | awk -F \/ '{print $1}'| rev)\007"}Mac
  • chpwd関数を使ってディレクトリを移動するたびにコマンドを実行
  • ターミナルのタイトルは echo -ne "\033]0;[任意の文字列]\007"
  • $(pwd | rev | awk -F \/ '{print $1}'| rev)はカレントディレクトリの文字列を取り出すコマンド
アプリンゴ
アプリンゴ
たくさんタブを開いて開発する時はタブのタイトルにカレントディレクトリの表示は必須ですよね

 

 

コメント