MacOSXで最強のTerminal環境を構築するには
Posted by nanki Wed, 10 Feb 2010 19:00:00 GMT
:gyazo:520:resize.width:to.png)
大それたタイトルだが、Terminal.app(以下Terminal)のタブ機能を快適に使う話である。
Terminalを使い倒している皆様なら、当然のことながら、5~10の端末が開いていると思うが、僕は今までタブを使ってこなかった。
これは大体次のような理由によるものである。
- 切替が面倒くさい
- 中身が分からない
- タブの分狭くなる
今回は、この三つの問題を解決して、タブを快適に使おうじゃありませんか。
問題: 切替が面倒くさい
これはTerminal.app が、次のタブ/前のタブ、という操作しか用意していないことに起因する。 2~3つなら問題ないが、5~10のタブを切り替えるには機能不足。
これを terminaltabswitchingを使って解決する。
terminaltabswitching はTerminal.appのタブの切替を⌘0-9 で行えるようにするSIMBLプラグイン。 本家からforkされ、いくつかSnowLeopard関連の変更などがあたっていそうな niw’s terminaltabswitching at master - GitHub に、このコミットをマージしたものを使っている。
ビルド方法は
$ xcodebuild -configuration Release build
buildするだけで勝手にinstallされる。
これで、タブの切替が楽になった。
問題: 中身が分からない
タブの切替は出来るようになったが、タブの中身は切り替えるまでわからない。 プロセス名が書いてあったりするが、全部zshじゃあどれがどれだかわからないし、vimを終了すると、”Thanks for flying Vim”とかに書換えられて鬱陶しい。 ここでは、zsh と vim について掘り下げる。他の環境の人は各自深追いしてください。
# ~/.zshrc
function title {
print -n "\e]0;$@\a"
export TITLE="${(pj: :)@}"
}
chpwd() {
title $(basename "$(pwd)")
}
cd .まず、便利な関数titleを用意する。
$ title hello terminal! でタブのタイトルが設定できる。
また、現在のタブのタイトルを簡単に得る方法がたぶんないので、環境変数に保存する。
chpwd は、カレントディレクトリが変化した時に呼び出され、現在のディレクトリ名をタイトルに設定する。 これで、どのタブが何か一目瞭然となる。わからないのは、ディレクトリ名をつける人のセンスの問題に帰着する。
# ~/.vimrc
execute ":set titleold:".fnameescape($TITLE)
execute ":set titlestring:".fnameescape($TITLE." - %t")vimは終了時に、titleoldをタイトルとして設定するので、それを、環境変数$TITLEにしておく。 さらに、ファイル編集中は、ファイル名が表示されるようになった。
問題: タブの分狭くなる
MacOSXの画面はただでさへ、Dockやメニューバー、タイトルバーで狭くなっているのに、この期に及んでタブバーでさらにせまくなるなんて許せない。 もう、画面を90度回転させて使いたい。
回転は首が痛くなりそうなのであきらめて、アプリケーションをフルスクリーンで使う方法ならある。 megazoomerがそれ。これもSIMBLプラグイン。SIMBL様さま。 使い方は、ここぞという時に⌘Enter
どうせ、タブとか考慮されてないから、変な事になるんでしょ、と思いきや、Dockもメニューバーもタイトルバーもきれいに消えて、すごい快適。
難点は、
- そのアプリケーションがアクティブな間Spotlightが使えなくなる
- マウスで履歴などを選択する時に、ウィンドウ下端に行っても、自動でスクロールしない
ついでにSafariでも使ってみたけど、たまに変になる。
数々の苦難を乗り越えて
当初の問題を解決したので、次いってみよう。
Marc Liyanage - Blog - Mac OS X - Terminal Tricks: “term” revisited, with tabs で公開されているスクリプトでは、AppleScriptを通して、Terminalを操作し、コマンドラインからタブを開く事ができる。
これを、~/bin/term などに保存すると、$ term -t ~/work でタブを開く事ができる。
コマンドの実行などもできる。
さらに、こんな感じのコマンドも用意した。zshのaliasでいい人はそっちの方がいいと思う。
#!/bin/sh
# ~/bin/tab
term -t "$@"僕の場合、今手を付けている作業を、ブラウザのタブやTerminalのカレントディレクトリなどを外部記憶として保存しているので、OSの再起動はとても避けたい作業のひとつだが、 次のようなコマンドを実行することで、zshが開いているタブ群を再現できるスクリプトが得られるのでとてもよい。
$ lsof -a -c zsh -d cwd | tail +2 | awk '{print "tab " $9}' | sort | uniq
tab /Users/nanki/*******/****
tab /Users/nanki/*******/*********/****/**********
tab /Users/nanki/*******/********************
tab /Users/nanki/****/*********/****/****/****
tab /Users/nanki/****/****/*********(あ、エスケープしてない)
疑問点まとめ
- 10を超えるタブはどうするのかしらん
- screen はどうしよう
- AppleScript使ったらタブのタイトルとれるかな?
参考:
- Ciarán Walsh’s Blog » Tab Switching in Terminal
- terminaltabswitching
- niw’s terminaltabswitching at master - GitHub
- Commit 8846a7daaf83769592750c8400a115ffac8b90cc to AaronH’s terminaltabswitching - GitHub
- ianhenderson.org - megazoomer
- Marc Liyanage - Blog - Mac OS X - Terminal Tricks: “term” revisited, with tabs
