tmuxのおすすめconf設定@2019

# 概要

最新記事をこちらに投稿していますので、もしよければこちらも御覧くださいませ。
https://red-full-moon.com/tmux-2020/

正直何番煎じかわからないがQiitaでのtmux.confの情報が軒並み古くなってしまっているため、今日（2019年7月1日）現在でそこそこ新しいバージョンである2.9に対応したtmux.confを晒す。
みなさんのより良いtmuxライフの足しになればと思います。
tmuxってなに？何が便利なの？という人は[こちら](http://kanjuku-tomato.blogspot.com/2014/02/tmux.html)の記事が参考になります。
個人的な（tmuxをおすすめする）意見を書き始めるとそれはそれでまた一つの記事になりそうなので、省略しますが、ざっくり言うと下記の理由です。

- 私はiTerm2が非常に好きだったのですが、いかんせんWindowsにはない。
    - 環境によらずペインの分割を自由自在にしたい
- 再起動時などにコンソールの状態を保存しておきたい

# この記事でできるようになること
- 完成図
![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125791/93f32740-a1e2-81bf-df35-fcc54caa37bf.gif)


- 見た目の特徴
    - 非アクティブのペインが白っぽくなる（アクティブペインが見やすい）
- 機能的特徴
    - マウスが使える
    - クリップボードとの連携（プラグインは不要）
    - ペインの移動がprefix不要でスムーズに
    - ペインの並列実行の有無をトグルで行う

# 前提
- 対象環境
    - Mac（Mojabe）
        - tmux 2.9
        - iTerm2
            - クリップボードとの連携をするため（赤い部分にチェックをつける）
            ![ScreenShot 2019-07-01 22.14.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125791/2839570c-2b09-e247-4449-e207508cf363.png)

    - Ubuntu(18.04) in WSL
        - tmux 2.9a
            - aptで入るのは2.1と古いので最新は[この方](https://qiita.com/ha4gu/items/aebe9207904f52ee4fb6)の記事を参考に入れるとよいです。
            - ＠ha4gu様、掲載許可ありがとうございます！
        - win32yank.exeを導入してクリップボードと連携する。
            - [win32yank](https://github.com/equalsraf/win32yank/releases)はクリップボードと連携するツール。
            - 上記URLからダウンロード&解凍後Windows側でパスの通ったディレクトリに配置。

# 本題

さて、気になるconfの内容ですが、こちらです。

```conf
# 基本設定
## 256色端末を使用する
set -g default-terminal "screen-256color"
set -g terminal-overrides 'xterm:colors=256'
## Escキーの遅延を解消
set -s escape-time 0
## status line を更新する間隔を1秒にする
set-option -g status-interval 1
## ウィンドウのインデックスを1から始める
set -g base-index 1
## ペインのインデックスを1から始める
setw -g pane-base-index 1
## アクティブなペインのみ白っぽく変更（真っ黒は232）
set -g window-style 'bg=colour239'
set -g window-active-style 'bg=colour234'

# キーの割り当て変更
## prefixキーの割り当て(Ctr+a)
set -g prefix C-a
## prefix + -で水平分割
bind - split-window -v
## prefix + \で垂直分割
bind \ split-window -h
## ペインの移動をprefixなしで行う（Shift + 矢印キー）
bind -n S-left select-pane -L
bind -n S-down select-pane -D
bind -n S-up select-pane -U
bind -n S-right select-pane -R
## ペインの順次移動をCtr + o に設定
bind -n C-o select-pane -t :.+
## 並列実行のトグル化
bind e setw synchronize-panes \; display "synchronize-panes #{?pane_synchronized,on,off}"

# status lineの設定
## window-status を中央揃えで配置する
set-option -g status-justify "centre"
## status line の背景色を指定する。
set-option -g status-bg "colour238"
## status line の文字色を指定する。
set-option -g status-fg "colour255"
## status-left の最大の長さを指定する。
set-option -g status-left-length 20
## status-left のフォーマットを指定する。
set-option -g status-left "#[fg=colour255,bg=colour241]Session: #S #[default]"
## window-status のフォーマットを指定する。
set-window-option -g window-status-format " #I: #W "
## カレントウィンドウの window-status のフォーマットを指定する
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I: #W #[default]"
## status-right の最大の長さを指定する。
set-option -g status-right-length 60
## status-right のフォーマットを指定する。
set-option -g status-right "#[fg=colour255,bg=colour241] #h | LA: #(cut -d' ' -f-3 /proc/loadavg) | %m/%d %H:%M:%S#[default]"

# 操作系
## マウス操作を有効化
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
## コマンドモードでの選択方法をvim風に変更
set-window-option -g mode-keys vi
setw -g mode-keys vi
bind-key -T copy-mode-vi v send -X begin-selection
## クリップボートとの連携
### ☆MacOS
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
### ☆Windows(WLS)
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "win32yank.exe -i"
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "win32yank.exe -i"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "win32yank.exe -i"
unbind-key -T prefix v
bind-key v run "win32yank.exe -o | tmux load-buffer - && tmux paste-buffer"
```
最後の☆２つの箇所はOSによって書き分けてください。
２つ同時に書くとどうなるかは保証できないです。

# 解説
## 基本設定
これらは見た目の問題なので拘る必要はないです。
私は割とシンプルに基本的なものしか入れてませんが個性が出るところなのでこだわりたい人はここでもりもりしてください。
基本的にはコメントのとおりです。

## キーの割り当て
- prefixは初期だと個人的には使いにくいのでControl + aに変えてます。
- ペインの切り替えはより直感的に[-]で水平分割、[|]のキーである¥で垂直分割です。
- ペインの移動はシフトキー + 矢印キーで動けます。
    - bind -nはprefix不要、という意味です。他でも使えますのでお好みで設定してください。
    - 別途 Control + oで順次移動もできます。
- prefixキー + eで同時実行のオンオフにできます。
    - オンオフの様子はこんな感じ
    ![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125791/5cac0c3c-ac56-59b4-82d6-c301f4fc8ca1.gif)


## ステータスラインの設定
ステータスラインを下に表示するのですがそこの設定を書いてます。
基本的にはコメントのとおりです。

##操作系
基本的にはマウスでのスクロールを有効化したり、prefix+[で入るコマンドモードでのコピーの仕方をvi風にしている。
またそのコピーしたデータをクリップボードと連携するための設定が記されている。
WindowsもMacも同じことができるが書き方が違うので環境に応じて書き換えてください。

# おわりに
以上です。
皆さんからもおすすめの設定があれば教えてください。

ブログ始めました、よかったら遊びに来てください
https://red-full-moon.com/

![error]()