iTermでSSHの接続先によって背景色を変える


色を変える理由?

非常に簡単で、SSH先の本番サーバでやらかさないようにするため

ググって出てくるの(iTerm SSH 接続先 背景色 変更)、確かに色は変わるが元の色に戻すのが面倒だったり、微妙に違う色になるのでイライラする


結論から言うとプロファイルスイッチを利用する

まず、 iTerm2 -> Preference で設定画面を開く。

Profile タブをクリックし、現在使っているプロファイルを複製する。(プロファイルを選択し、下の歯車アイコンをクリックして Duplicate Profile)

名前をDefault含め、わかりやすい名前にする。(僕は zsh, zsh_red, zsh_blue のようにしている)

プロファイルのコピー・名前の変更が出来たら Colors タブを選び、好みのバックグラウンドカラーを選ぶ。

おわったら

.zshrc を編集する。 bashは知らん。

function ssh_color() {
 case $1 in
   # product から始まるところは背景を赤くする
   # staging から始まるところは背景を青くする
   product-* ) echo -e "\033]50;SetProfile=zsh_red\a" ;;
   staging-* ) echo -e "\033]50;SetProfile=zsh_blue\a" ;;
   *) echo -e "\033]50;SetProfile=zsh\a" ;;
 esac
  ssh $@
  echo -e "\033]50;SetProfile=zsh\a"
}

alias ssh='ssh_color'
compdef _ssh ssh_color=ssh

ミソは compdef _ssh ssh_color=ssh で、これをしないとコマンド補完が効かなくてmacを破壊したくなる(したくなった)

編集し終わったら $ source .zshrc する。

これでマッチしたホスト名に対応するプロファイルが読み込まれ、終わったらデフォルトプロファイルに戻るので幸せになる。

さいごに

ちなみに 対象ホストSSHで接続しながらプロファイルの色を触りながらでも色のプレビューが効く。