##はじめに
先週の記事で iTerm2 3.0の新機能について書いたが、今回の機能追加で大きな役割を果たしている「Shellとの統合」についてもう少し調べてみる。元ネタはこちら。
##導入方法
一番簡単なのは、iTerm2を立ち上げてメニューから "iTerm2" -> "Install Shell Integration"を選ぶこと。手動でやるのであれば
curl -L https://iterm2.com/misc/install_shell_integration.sh | bash
あるいは、このファイルを一度ダウンロードしておいてからSourceする。その結果、~/.iterm2_shell_integration.bash というファイルができて、それをsourceするコードが~/.bash_profileに追加される(bashの場合)。
##新機能の利用方法
###マーク
上記の導入を行うとマーク(プロンプト左の小さな青い三角)は自動的に追加される。
コマンドを打つ度にこのマークが表示されるが、過去のマークはCmd-Shift-Up/Down
で行き来できる。
###アラーム表示
時間のかかるジョブが終わった時にお知らせしてくれるようにできる。コマンドの実行を始めたあと、メニューから"Edit" -> "Marks and Annotations" -> "Alert on Next Mark" か、あるいは、Cmd-Opt-A
をするとアラームセット。セットされるとウィンドウの右上に目のアイコンが現れる。
そして、時間が来るとお知らせされるのだが、モーダルのウインドウが現れるかNotificationにするかはメニューの上で選べるようになっている。
###コマンドの実行結果
コマンドの実行結果が0では無いときにはマークが赤くなる。こんな感じ。
そして赤マークを右クリックするとステータスコードの詳細がわかる。
###リモートホストからのファイルダウンロード・アップロード
リモートホストにsshなどでログインして、lsコマンドなどでファイル名を表示させたりすることはよくある。そこで見つけたファイルを手元にダウンロードするにはそこからこちら向きにscpするか、別セッションでこちらscpするか。いずれにしても面倒だ。iTerm2 3.0では、そんな時に、ダウンロードしたいファイル名を選択して右クリック→ "Download with scp from <ホスト名>" を選べば良い。メニューに "Downloads"という項目ができて、ダウンロードの履歴や進捗状況はそこで確認できる。ダウンロードが終わればNotificationが現れる。
同様にこちらからリモートにファイルを送りたい時には、リモートホストにログインしている状態で、ファイルを起きたい場所にディレクトリ移動。それから、手元のマシンのFinderで送りたいフィルを選んでiTerm2のWindowにドラッグ・アンド・ドロップ。その際、ドロップする時にOptionキーを押して置くのを忘れないように。そのままドロップするとこれまで同様、そのファイルパスがコマンドラインにコピーされるだけになる。Optionキーを押してドロップすると「このファイルをこのホストのこの場所にコピーするけどいい?」という確認が出てOKを押すとアップロードが始まる。ダウンロード同様に "Uploads"というメニュー項目が増えてそこで進捗状況の確認ができる。
これは地味に結構便利かもしれないなと思う。
###コマンド履歴
Cmd-Shift-;
を押すとこれまで実行したコマンドのリストが現れる。ご丁寧なことにいつ実行されたのかのタイムスタンプつき。そこでタイプするとインクレメンタルサーチされ、入力にマッチするものが残されていくという仕掛けで、最近のブラウザのURL入力の部分とか、emacsのhelmに似た感じ。気の利いていることに、このコマンドのリストはホストごとに管理されていて、リモートログインしたものと混ざることがない。Shellのコマンドヒストリー機能を使う事が多かったが、見た目やわかりやすさの面ではこちらにもメリットありそう。
###ディレクトリ履歴
Shellとの統合をしているので、どのディレクトリに行ったのかもiTerm2側で把握している。Cmd-Opt-/
でコマンド履歴同様にポップアップでリストが現れる。
###プロファイルの自動切り替え
ホスト名、ユーザ名、現在のディレクトリなどを条件にプロファイルを切り替えられる。設定は "Preferences"->"Profiles"->"Advanced"で、ルールをそこに記述できる。用途としては例えばrootになった時にバックグラウンドの色を変える(そして自分がrootであることを意識して気をつける)とかなのだが、そもそも最近はrootになって作業というのはあまりないので使いみちがあまりないかな。あとは、自分がリモートホストで作業している時に変えるとかもあるかもしれないが、これまで困ったことがないのできっと使うことはないかな。
###トリガー
正規表現である文字列が表示された時にそれに結びつけたアクションを行うものらしいのだが、これも有用な使い道を見つけられず。なにか便利な例があればまた紹介したい。
##最後に
ということで、iTerm2 3.0のShell統合の機能をもう少し詳細に見てみた。マークで実行結果が色表示されるのは地味に便利。そしてアラームで実行終了をお知らせして貰ったり、コマンド履歴でincremental searchなどは使うでしょう。あとは、時折リモートホストからのダウンロード・アップロードかな。