botchy hack note

TypeScript、Ruby、Golang とか Macとかの備忘録です.間違いがあるとご指摘くださると嬉しいです.

VS Code で統合端末起動時に tmux が実行されるのを防ぐ方法

f:id:bokken31:20170827135138p:plain

こんにちは bokken (@bokken_)です。

VS Code を使う上で、コマンドをサクッと実行できる統合ターミナルはとても便利ですよね。

ただし、 ~/.zshrc などに tmux を初回起動するように設定していた場合、統合ターミナルは微妙に使いにくいものになります。 (具体的には、スクロールの挙動がおかしくなったり、コピペが上手くいかなかったりなどなど)

そもそも、 VS Code 自体も端末切り替えの機能が付いているので、必要ありません。

そこで、今回は VS Code 起動時に tmux を起動させない tips を紹介します。

対象読者

  • tmuxをシェル起動時に実行するように設定している
  • iterm2 などで作業をすることもあるので起動時に tmux を起動する設定は消したくない

背景

筆者が普段 iterm2 などのターミナルを使って作業をしているときは tmux を使用しています。

筆者は下記のように tmux をターミナル起動時に起動する設定をしているのですが、これだと VS Code の端末起動時にも tmux を起動してしまいます。

# tmux 起動中じゃなければ自動的に tmux を起動する
if [[ ! -n $TMUX ]]; then
  tmux new-session
fi

解決策

解決策は、下記のようにシェル変数 VSCODE_PID が設定されているかどうかを条件に入れることです。

# tmux 起動中じゃなければ自動的に tmux を起動する
if [[ ! -n $TMUX ]] && [[ $VSCODE_PID == "" ]] ; then
  tmux new-session
fi

&& [[ $VSCODE_PID == "" ]] が該当の箇所です。 VS Code は実行時にプロセスIDをシェル変数として登録するようで、これが登録されているかどうかで VS Code 起動時の処理を分岐できます。

このテクニックは tmux に限った話ではなく、VS Code とその他で起動時に処理を分岐したいときに使えるtips です。

よかったら使ってみてください。

おまけ

その他にも VS Code は下記のシェル変数を設定するようです。

VSCODE_NODE_CACHED_DATA_DIR_281=/Users/bokken/Library/Application Support/Code/CachedData/cb82febafda0c8c199b9201ad274e25d9a76874e
VSCODE_NLS_CONFIG={"locale":"ja","availableLanguages":{"*":"ja"}}
VSCODE_PID=281
VSCODE_IPC_HOOK=/Users/bokken/Library/Application Support/Code/1.14.2-main.sock

おわりに

いかがだったでしょうか。役に立つ情報があれば幸いです。

良かったら TypeScript や VS Code, AWS 関連のつぶやきをしているので @bokken_ をフォローしてみてください。

それではより良い VS Code ライフをお送りください!