iTerm2 3.0の新機能


##はじめに

以前、[iTerm2 2.0の新機能: tmuxの統合](http://qiita.com/ksato9700/items/ec14ed55187f626ddb84)という記事を書いたが、それから一年半余り。そのiTerm2が3.0になるという。どんな風に変わったのか、[ここに書かれた新機能のリスト](https://iterm2.com/version3.html)を眺めてみようと思う。なお、[ベータ版はここ](https://iterm2.com/downloads/beta/iTerm2-2_9_20160206.zip)からダウンロードできる。


##新しい見た目
OS Xの新しい「フラット」な見た目に合わせたとのこと。iOSから逆輸入されたあれだけど、一見、違いがわからない。アイコンのデザインは確かに今風になった。

![v2.jpg](https://qiita-image-store.s3.amazonaws.com/0/30342/c93caa81-f8df-7e8d-c827-151cf55562e4.jpeg "v2.jpg") ![v3.jpg](https://qiita-image-store.s3.amazonaws.com/0/30342/1cbc02da-51b2-6746-8c81-eb02a275d848.jpeg "v3.jpg")

それが、タブを表示させてみると違いがハッキリする。左がv2右がv3。閉じるためのxとか、ショートカットの⌘<数値>が表示され続けるのはどうかと思うけど、設定で表示させないようにできる。

![v2_tag.jpg](https://qiita-image-store.s3.amazonaws.com/0/30342/4ccb8c23-db39-1a8a-8226-e91380720733.jpeg "v2_tag.jpg") ![v3_tab.jpg](https://qiita-image-store.s3.amazonaws.com/0/30342/c481278c-4238-4f05-ae70-67482d41ebf6.jpeg "v3_tab.jpg")

## Shell統合

iTermで動いているShellの情報をiTerm側にお知らせすることで色々な事ができるようになる、という事らしい。渡す情報は、例えば今実行中のコマンドとか、今どのホストにログインしているかとか、ユーザ名とか今いるディレクトリとか。それを使ってiTerm上で、コマンド実行の結果を色表示したり、時間のかかるジョブが終わった時にお知らせしたり、ドラッグ・アンド・ドロップでリモートホストへファイルをアップロード・ダウンロードしたり、できるようになるとのこと。[設定の仕方と使い方がここ](https://iterm2.com/shell_integration.html)にあるので、もう少し調べて別の記事として書いてみようかな。

## プロファイルの自動切り替え

SSHで別のホストにログインしたり、sudoで何か実行したり、今いるディレクトリによってもプロファイル（画面の色などの設定）を自動的に切り替えられるようになる。これは上記の「Shell統合」の一部とのこと。

## セッションの復活

iTerm2がアップグレードしたり、強制終了したり、クラッシュしたりしても、再度iTerm2が立ち上がればその状態を復活させることができるとのこと。「tmuxなしでtmuxみたいなことができる」と書いてあるが、実行中のプロセスが戻るわけじゃないみたい。

## イメージの表示

使ってターミナル画面上に画像をそのまま表示できるようになる。[ここにあるスクリプト](https://raw.githubusercontent.com/gnachman/iTerm2/master/tests/imgcat)をダウンロードし、PATHの通っている場所に`imgcat`という名前で置いてから、
```
$ imgcat <image-file>
```
とするとよい。例えばこんな感じ。
![inline_image.jpg](https://qiita-image-store.s3.amazonaws.com/0/30342/5d959a96-841e-8c39-ce18-9b88dc80b0ac.jpeg "inline_image.jpg")

Emacsで画像表示が出来るようになった時にも思ったが、これを使う場面がどれくらいあるのか正直わからない。でもまぁ、出来るに越したことはないだろうと思う。

## バッジ

ターミナル画面の右上に固定で文字を出しておけるようになる。この機能を「バッジ」と呼ぶらしい。例えば現在のホスト名とかユーザ名とか、Gitのブランチだとか。意図としてはコマンドプロンプトにそういう情報を出すのと一緒だが、情報が多くなってくるとプロンプトが長くなるのは防げるのかな。でも、右上に出っぱなしなんだよね。これも使ってみないとどれくらい常用できるかわからないな。

## パスワードマネージャ

各種パスワードを覚えておいてくれる機能が組み込まれる。実際に覚えるのは Mac OSのkeychainでセキュリティ的にも安心、パスワードプロンプトが出ていない所で送ったりもしないようになっているよ、とのこと。パスワードプロンプトの度に自動でパスワードマネージャを開くようにもできる。

## 「閉じる」の取り消し（Undo）

ターミナルをうっかり閉じてしまい「あ、しまった」と思うこと、ありますよね。セッションとか、タブとか、ウインドウとかを閉じたあと、5秒以内にCmd(⌘)-Zすれば復活されられる！ これは地味に便利かもしれない。とっさにこのショートカットを思い出せるのかというのはあるけど、Undoだからきっと大丈夫。

## タブを左に

タブを上と下だけじゃなく左にも置けるようになる。確かにタブをたくさん開いた時にはこちらの方が見やすいかも。そして「あの作業、どこのタブでやってたっけかな？」というのを検索できるようになる。Cmd-Shift-OでSpotlight検索のような小窓が開き、そこに作業しているディレクトリ名か前に打ったコマンド名とかを打ち込むと候補が出てくるので、一つを選ぶとそのタブを開く。これをQuickly機能というらしいが、タブが多くなってくるとこれも便利かも。

## 動的プロファイル

プロファイルが置かれている場所をiTerm2はwatchしていて、変更があれば即座に画面に反映させるとのこと。だから「動的」なのね。そして、プロファイルはAppleのプロパティリスト形式（XML）だけでなく、JSONでもOKになる。JSONだと自動生成とかも楽になるし、最近の流れだね。

## カーソル居場所特定

色設定でカーソルの居場所を見失わないようにできるんだけど、そもそも見失ったことが無いので何が良いのかちょっとわからなかった。

## タイムスタンプ

各コマンドが実行された時刻を覚えているのでいつ実行したかとかどれくらい時間がかかったかとか、あとからでも確認できる。Cmd-Shift-Eでオン・オフできる。

## 実行結果のキャプチャ

「iTerm2をIDEとして使おう！」ってなんのこっちゃと思うけど、要はコマンド出力を正規表現とかで拾ってジャンプ出来るようになるということらしい。それで、例えばコンパイラエラーを引っ掛けたりとか。これも使い方がよくわからないので、後ほど要調査かな。

## その他諸々

入力の解析をメインスレッドから追い出したのでパフォーマンスが良くなったよ、とか、数百のバグを直したよ、とか、バイナリを表示しようとした時に音を鳴らさないようにできる（間違ってやってしまった時にピ・ピ・ピーとかなって慌てるアレを防げる）、とか、文字列をペーストする前に編集できる、とか、があるらしい。

あと、Alfred Scriptとか、Applescriptに関しても書かれているけど、使っていないし、今後も使わないと思うので、省略。

## 最後に

軽い気持ちで見始めたけど、意外とボリュームがありました。ターミナルエミュレータってもう進化の余地がないアプリケーションの一つだと思っていたけど、そうでも無いことを再認識。単に機能を追加していくというよりも、かゆいところに手が届く、無くてもなんとかなってたけど使い始めたら無いと困る、的な機能を追加してきているなという印象でした。