bash on windowsってすごーい！powerlineとTmuxを駆使してMacのターミナルっぽくする（Tera Termも卒業する）

# はじめに
私はプライベートでmacOS Sierraを使用していて、ターミナルはこんな感じに設定しています。
題名にもある通り、tmuxとpowerlineを使ってます。
![image](https://qiita-image-store.s3.amazonaws.com/0/157454/8a4c2412-5ffc-4130-e57b-104312e30768.png)

しかしWindowsのコマンドプロンプトはどうしても使いづらいです。
「あ～業務端末もMacにしてくれないかな～」と嘆いていましたが、偉大な先輩たちはそんな文句も言わずWindowsでもイケてるターミナルを構築しているんですよね。

そういうわけで、この画像に限りなく近いターミナルをWindowsでも構築することに。

※macで構築する場合は[ADACHIN SERVER Lab](https://blog.adachin.me/wordpress/?p=5451)にわかりやすく書いてあります。

# cmderを入れるとよい
偉大な記事です。もうこれだけで全然違います。こちらの記事を参考にまずはcmdから離れます。
記事にも記載されてますが、mini版を落としました。
>・ [Bash on Windows + cmderでまともなターミナルを獲得する(tmuxに関する追記有り)](http://qiita.com/yutaszk/items/fb77435296b131fd0a3a)
・ [cmderをダウンロード](http://cmder.net/)

Macではzshを使用しているので、Windowsでも合わせてzshをデフォルト起動に設定しました。
zshをインストールしていない場合は以下の手順でできます。

```
C:\Users\username
入 bash            #bashと入力すればbashが起動します
root@DESKTOP-XXX:/mnt/c/Users/username# apt-get install zsh
```

あとは参考記事に記載されたとおり、zshをデフォルトで起動する設定を加えればOKです。

# powerlineのインストール
powerlineはpipを使ってインストールするので、pipが入ってない場合は先にインストールします。

```
$ apt-get install python-pip
```

その後、powerlineをインストールします。

```
pip install powerline-status
```

すると、以下の場所にディレクトリが配置されます。
/usr/local/lib/python2.7/dist-packages/powerline

さらに下の階層にある、config_filesというディレクトリをホームディレクトリにコピーしたいので先にディレクトリを作成しておきます。

```
$ mkdir -p ~/.config/powerline
```

ディレクトリを移動して、ソースをコピーします。

```/usr/local/lib/python2.7/dist-packages/powerline/config_files
$ cp -r * ~/.config/powerline
```
これでホームディレクトリでconfigを自由に編集できますね。

## 設定ファイル
ホームディレクトリにコピーしたファイルをちょっといじってみます。

```~/.config/powerline/themes/
$ vim powerline.json
```
![image](https://qiita-image-store.s3.amazonaws.com/0/157454/27e875a6-9c44-ee37-248e-f082cc79a206.png)


70行目あたりから天気の記述があると思います。ターミナルに天気を表示させたい場合、locationの記述が必要らしいのでわかりやすく86行目に追記しておきます。

```
"location_query": "tokyo, japan"
```

※画像MacですがWindowsも同じです。
![image](https://qiita-image-store.s3.amazonaws.com/0/157454/01637ecd-d2b4-cdd2-16c9-451925a43353.png)

# Tmuxをインストール
以下のコマンドでインストールします。

```
$ apt-get install tmux
```
```
$ tmux -V
tmux 1.8
```
バージョンが見れたので無事インストール完了です。
以下のコマンドを叩くと、起動するはずです。

```
$ tmux
```
緑色のバーが出てきたらOKです。
## 設定ファイル
次はconfigファイルを新規作成して、細かい設定をしていきます。

```
$ vim ~/.tmux.conf

bind r source-file ~/.tmux.conf \; display-message "Reload Config!!"
set-window-option -g mode-keys vi

unbind-key C-b
set-option -g prefix C-s
bind-key C-s send-prefix

#mouse_linux
#set -g mouse on

setw -g window-status-current-fg blue

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

#tmux powerline
run-shell "powerline-daemon -q"
source "/usr/local/lib/python2.7/dist-packages/powerline/bindings/tmux/powerline.conf"
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'

set-option -g status-position top
```
**キーバインドをデフォルトの（Ctrl-b）から（Ctrl-s）変えています。**

次に一度exitでTmuxから離脱して、再度Tmuxを起動します。
すると今変更したconfigがリロードされるので、ステータスバーの表示が変わると思います。
※次回以降のリロードはキーバインドで設定したCtrl-s + rでリロードできちゃいます。

```
$ exit
$ tmux
```

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/157454/d96e7fce-edb7-65d9-5cc5-e2b01363f807.png)

画像をみてもらえばわかると思いますが、右のステータスバーの表示がuptime-ロードアベレージ-日付-hostnameになっています。Macではここを天気-バッテリー残量-日付-時間-hostnameにしてるので、ここも似たような感じに設定変更します。

以下の内容で記述します。

```~/.config/powerline/themes/tmux/default.json
{                                                                                      
        "segments": {                                                                  
                "right": [                                                             
                        {                                                              
                           "function": "powerline.segments.common.wthr.weather"        
                    },                                                                 
                        {                                                              
                           "function": "powerline.segments.common.bat.battery"         
                    },                                                                 
                        {                                                              
                                "function": "powerline.segments.common.time.date"      
                        },                                                             
                        {                                                              
                                "function": "powerline.segments.common.time.date",     
                                "name": "time",                                        
                                "args": {                                              
                                        "format": "%H:%M",                             
                                        "istime": true                                 
                                }                                                      
                        },                                                             
                        {                                                              
                                "function": "powerline.segments.common.net.hostname"   
                        }                                                              
                ]                                                                      
        }                                                                              
}                                                                                      
```

編集後、リロードします。
すると、ステータスバーがこんな風に！

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/157454/bb9134ef-1886-47fa-cf95-09f8c5d35ce3.png)

おお、きたぞきたぞ。
ペインを分割していけば、最初の画像みたいになるでしょう。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/157454/98f93420-577d-bf99-46e4-fbd98f8d2e19.png)

また、zshrcに以下の記述をしておくと、```$ tm <windowname>```でTmuxを起動できるようになったりします。偉大すぎる。

```
#tmux
function tm() {
       if [ -n "${1}" ]; then
           tmux attach-session -t ${1} || \
           tmux new-session -s ${1}
    else
           tmux attach-session || \
           tmux new-session
       fi
}
```
## トラブルシューティング
最初にconfigを作成したときは一度exitして、再度tmuxコマンドを叩くとconfigをリロードしてくれるのですが、リロードしても設定が反映されない場合がありました。
前に立ち上げたTmuxのプロセスが残ってる場合があるので、そいつらをkillしてあげてください。

```
$ ps aux | grep tmux
```


# .ssh/configを作成してTera Termいらずにする
「Windowsのコマンドプロンプトは使いたくない、なのでターミナルは無難にTera Termにしとこう」などという私はもういない。
だいぶ使いやすいターミナルになったので、bash on windowsからSSHできるようにしておけば何の問題もないですね。
これでWindowsローカルからAnsibleを叩くこともできてしまいますね！（それが一番やりたかった）

# おわりに
bash on windowsを舐めてましたすいません。Betaとかって書いてますけど「もうこれただのUbuntuじゃん！」とか言いながらワイワイやってました。
わざわざVM立ててAnsible立てて・・・とかやりたくなかったのでだいぶよくなりました。

# 参考
* [ADACHIN SERVER Lab 【OS X】tmux 2.4とpowerlineのインストールも変わった！](https://blog.adachin.me/wordpress/?p=5451)
* [Bash on Windows + cmderでまともなターミナルを獲得する(tmuxに関する追記有り)](http://qiita.com/yutaszk/items/fb77435296b131fd0a3a)
* [~/.ssh/config で簡単に複数ホストへのSSH接続を管理する](http://superbrothers.hatenablog.com/entry/20090730/1248971671)
* [tmuxを使い始めたので基本的な機能の使い方とかを整理してみた](http://kanjuku-tomato.blogspot.jp/2014/02/tmux.html)