フロントエンドエンジニアの友達からターミナルで快適にgulpを使いたいといことなので、GNU Screenをすごくお勧めしておきました

# はじめに
タイトルの通り、HTMLとかCSS書いてる友人から「ターミナルがコピーされたりしてうまく使えないけどなんかいい方法ない？」って聞かれたのでiTermとGNU Screenを導入してあげました。いろいろ込みで20分ほどでした。

環境はMacです。

# iTerm2の導入
まずTerminal.appからiTerm2に乗り換えてもらいました。
http://iterm2.com
ダウンロードしてアプリケーションディレクトリに配置です。
(Terminal.appはデフォルトで白いので、これで多くのマークアップエンジニアの恐れる黒い画面になります :P)

# screenrcの配置
Macはデフォルトならscreenが入っているのでそれを利用します。
ただし環境ファイルを置いておかないとscreenもちょっと使い勝手が悪いので注意です。
以下のファイルをホームディレクトリの`.screenrc`に置いておきます。
ホームディレクトリは例えば`hoge`ユーザなら`/Users/hoge/`となります。

```conf:.screenrc
escape ^t^t
autodetach on
vbell off
defscrollback 10000
shelltitle ''
# http://ducatt.blogspot.com/2007/04/screenutf-8screen.html
defencoding utf-8 utf-8
encoding utf-8 utf-8
caption always "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
bind x command -c REGION
bind -c REGION 2 split
bind -c REGION 1 only
bind -c REGION 0 remove
bind -c REGION o focus
bind -c REGION ^ resize

shell zsh

screen 0
screen 1
screen 2
screen 3
screen 4
screen 5
screen 6
screen 7
screen 8
screen 9
screen 10
sessioname hoge
```

書き出しには`cat > ~/.screenrc`として上記confをペースとして、Control-Dを二回押す、という方法があります。

(tmuxを使ってないのはなんとなくです)

# Screenの起動と終了

```shell-session
shell$ screen
````
とするとscreenが起動します。下に現在のタブが青くなって表示されています。

終了はすべてのタブを終了させるとscreenも終了できます。
タブの終了は`exit`と入力するか、`Control-D`で終了できます。

# タブの移動
タブの移動は`Control-t n`で次のタブ、`Control-t p`で次のタブに移動できます。
また`Control-t 1` とすると１番のタブにジャンプできます。

# アタッチとデタッチ
ScreenはTerminalを終了しても内部的に起動しっぱなしになります。
`Screen -ls`で起動しているScreenの一覧を取得できます。
![Screen Shot 2015-07-03 at 3.49.53 PM.png](https://qiita-image-store.s3.amazonaws.com/0/47327/1c168214-3ffb-87fe-e84e-8de85778e07b.png)
一つだけScreenが起動している場合には`Screen -x`でそのscreenに接続できます。これをアタッチといいます。

またScreenを起動したまま切断したい場合には｀Control-t d｀を入力します。これをデタッチと言います。
ターミナルを終了した場合には自動的にこのデタッチとなりますが、本当はこの`Control-t d`でデタッチしてターミナルを終了させてください。

## 複数起動している場合
![Screen Shot 2015-07-03 at 4.13.06 PM.png](https://qiita-image-store.s3.amazonaws.com/0/47327/c966458c-7edb-190d-9319-e36665cb3ec7.png)
複数起動していると上記のように`1211`と`9204`という二つのscreenが起動していたりします。
この状態だと`screen -x`しても「どっちにつなげばいいかわからないよボウヤ」といって怒られます。
なので`screen -x 9204`というように数字をつけて接続(アタッチ)し、すべてのタブを終了してscreenを終了させます。
そうすると次から`screen -x`だけでつながります。
(もちろん、終了させずに複数のscreenを運用することも可能です！)

# タブの名前変更
タブの名前は変更することができます。
変更したいタブで`Control-t :title`と入力します。コントロールを押しながらtキーを押し、指を話して`:title`(コロン title)と入力します。
すると新しい名前を聞かれるので入力してエンターキーを押します。
![Screen Shot 2015-07-03 at 3.54.21 PM.png](https://qiita-image-store.s3.amazonaws.com/0/47327/14ddfcdf-913b-491f-8f4a-36ea5d01be12.png)

# たくさん並べる
一つのScreenで複数のiTermを並べると快適です。
iTermは`Cmd+d`で新しいウィンドウを開くことができます。

![Screen Shot 2015-07-03 at 4.06.48 PM.png](https://qiita-image-store.s3.amazonaws.com/0/47327/f17861d2-317b-22d4-4f23-7681d3c25747.png)


# まとめ

`C-x`は「コントロールキーを押しながらxキー」という意味です。

| コマンド | 説明 | 備考
|:-----------|------------|:------------:|
| shell> screen | スクリーンの起動 |
| C-t n <br> C-t-n <br> C-t-space | 次のタブ | |
| C-t p <br> C-t-p | 前のタブ |
| C-t 1 <br> C-t 2 など | 数字のタブへジャンプ |
| C-t d | デタッチ(切断) |
| shell> screen -x |  Screenに接続 (アタッチ) |
| shell> screen -ls | 起動しているScreen一覧表示 |
| shell> screen -x 1234 |  1234番のScreenに接続 (アタッチ) |
| C-t :title | タブの名前変更 |

楽しいScreenライフを！

# 関連や参考

ごく最低限のscreenコマンドまとめ
http://qiita.com/soyanaka21/items/611d12256c927c4927e8
すべてのscreenを消す One liner
http://qiita.com/giwa/items/57f4e64a0c66a65c34e4
screenの使い方
http://itcweb.cc.affrc.go.jp/affrit/faq/tips/screen
screen コマンドメモ
http://dotnsf.blog.jp/archives/1003331169.html
screenの使い方
http://www.proton.jp/main/apps/screen.html

# 備考
* 非エンジニアにもわかりやすいように「タブ」と呼んでいます。というか正式名称知ら無くてググったら「ウィンドウ」なんですね。
* またデフォルトはコマンドが`C-a`ですが、行頭に移動とかぶっているので`C-t`としています。たまーに`C-t`使いますがこれによって`C-t-t`となっています。昔は一時期`C-z`というのが多かったですけど、Suspendとカブるので`C-t`としています。
* `screen -x`でデタッチすべきか`screen -r`か、というのがありますが、羽織りで共有することもあるので-xとしました。弊害があれば是非是非おしえてくださーい。