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)
はカレントディレクトリの文字列を取り出すコマンド
アプリンゴ
たくさんタブを開いて開発する時はタブのタイトルにカレントディレクトリの表示は必須ですよね
コメント