tmuxで開発効率アップ 基本のまとめ

![20180226181047.png](https://qiita-image-store.s3.amazonaws.com/0/258841/2aa87658-3122-e02b-f4d3-c01b5155e86d.png)

## 背景

エディタを開きながらログを見たりコマンド実行して見たりする際に便利だったtmuxのチートシート的な記事
リソース管理/ログ/コマンド操作を一つのターミナルで操作できるようになります。

## tmuxとは

ターミナルマルチプレクサと呼ばれるソフトウェアの一つ。1つのターミナルで複数の作業領域を簡単に操作できるようになる。
似てようなソフトウェアとしてGNU Screenがある。

GitHubでソースは公開されている。
[tmux/tmux](https://github.com/tmux/tmux)

## tmux用語

tmuxを使う際に独自の用語が何個かある。
よく出てくるのは下記

用語|概要
----|---
window|ペインの管理単位
pane|ウィンドウの中に複数持つことのできる領域
session|ウィンドウを管理する単位
server/client|サーバがすべてのセッションを管理

## 環境

``` bash
$ cat /etc/*-release | head -2
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.10

$ uname -r
4.18.0-10-generic

$ tmux -V
tmux 2.7
```

## コマンド

ここでの書いているのは基本中の基本操作。
使う上ではすべて必須の操作となりますので是非覚えてしまおう。

| コマンド                    | 説明 |
|:----------------------------|:-----|
|Ctrl-b + ?                     | ショートカット一覧 |
|Ctrl-b + d                     | デタッチ |
|Ctrl-b + w                     | ウィンドウ一覧 |
|Ctrl-b + c                     | ウィンドウ生成 |
|Ctrl-b + n                     | 次のウィンドウへ |
|Ctrl-b + p                     | 前のウィンドウへ |
|Ctrl-b + :                     | コマンドモードへ |
|Ctrl-b + [                     | コピーモード開始 |
|Ctrl-b + Ctrl-Space            | コピーモードでのコピー開始 |
|Ctrl-b + ESC-w                 |コピーモードでのコピー終了 |
|Ctrl-b + ]                     | コピーデータの貼付け |
|Ctrl-b + q                     | ペインのインジケータを表示 |
|Ctrl-b + t                     | 時計表示 |
|Ctrl-b + %                     | ウィンドウを左右ペインへ分割 |
|Ctrl-b + "                     | ウィンドウを上下ペインへ分割 |
|Ctrl-b + o                     | アクティブなペインの移動（次のペインへ移動） |
|Ctrl-b + x                     | ペインの破棄 |
|Ctrl-b + Space                 |ペインレイアウトの変更（左右、上下） |
|Ctrl-b : resize-pane -U 数字 | 上部ペインのサイズ変更 |
|Ctrl-b : resize-pane -D 数字 | 下部ペインのサイズ変更 |
|Ctrl-b : resize-pane -L 数字 | 左ペインのサイズ変更 |
|Ctrl-b : resize-pane -R 数字 | 右ペインのサイズ変更 |

## 設定ファイルを書いておこう

オプションだったりキーバインドの変更をコマンド実行でも変更できるがtmuxを終了すると元に戻ってします。
そこでいつものdotfileを作成して起動するたびに読み込まれるようにします。

以下は私が使っている設定ファイルです。
GitHubでも公開しています。
https://github.com/ryuichi1208/dotfiles

キーバインドやショートカットは好みが大変わかれる箇所なのでいろいろと考察も必要そう
https://qiita.com/hnw/items/02113da3476f29df768b
何を何へ割り当てるといいかなんかはホントに好みが分かれますが。。。

``` bash:~/.tmux.conf
# set prefix to C-a
set -g prefix C-a

# reset C-b as prefix key
unbind C-b

# decrease key stroke delay
set -sg escape-time 1

# reload .tmux.conf
bind r source-file ~/.tmux.conf \; display "Reloaded!"

# split vertically
bind \ split-window -h

# split horizontally
bind - split-window -v

# move pane
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# resize pane
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

# enable mouse
setw -g mouse on

# 256-color
set -g default-terminal "screen-256color"

# status bar
set -g status-interval 60
setw -g monitor-activity on
set -g visual-activity on

# copy mode
setw -g mode-keys vi
set-option -g default-command "exec reattach-to-user-namespace -l $SHELL"
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

# sync
set-option -g synchronize-panes off
bind e setw synchronize-panes on
bind E setw synchronize-panes off

## set status bar
set -g status-bg default
setw -g window-status-current-bg "#282a2e"
setw -g window-status-current-fg "#81a2be"

## highlight active window
setw -g window-style 'bg=#282a2e'
setw -g window-active-style 'bg=#1d1f21'
setw -g pane-active-border-style ''

## highlight activity in status bar
setw -g window-status-activity-fg "#8abeb7"
setw -g window-status-activity-bg "#1d1f21"

## pane border and colors
set -g pane-active-border-bg default
set -g pane-active-border-fg "#373b41"
set -g pane-border-bg default
set -g pane-border-fg "#373b41"

set -g clock-mode-colour "#81a2be"
set -g clock-mode-style 24

set -g message-bg "#8abeb7"
set -g message-fg "#000000"

set -g message-command-bg "#8abeb7"
set -g message-command-fg "#000000"

# message bar or "prompt"
set -g message-bg "#2d2d2d"
set -g message-fg "#cc99cc"

set -g mode-bg "#1d1f21"
set -g mode-fg "#de935f"

# right side of status bar holds "[host name] (date time)"
set -g status-right-length 100
set -g status-right-fg black
set -g status-right-attr bold
set -g status-right '#[fg=#f99157,bg=#2d2d2d] %H:%M |#[fg=#6699cc] %Y-%m-%d '

# make background window look like white tab
set-window-option -g window-status-bg default
set-window-option -g window-status-fg white
set-window-option -g window-status-attr none
set-window-option -g window-status-format '#[fg=#6699cc,bg=colour235] #I #[fg=#999999,bg=#2d2d2d] #W #[default]'

# make foreground window look like bold yellow foreground tab
set-window-option -g window-status-current-attr none
set-window-option -g window-status-current-format '#[fg=#f99157,bg=#2d2d2d] #I #[fg=#cccccc,bg=#393939] #W #[default]'


# active terminal yellow border, non-active white
set -g pane-border-bg default
set -g pane-border-fg "#999999"
set -g pane-active-border-fg "#f99157"
```

## 作業画面

ネットワークの設定したりログを見たりパッケージを入れたりを同一のターミナルでやっている画面

![スクリーンショット 2018-12-31 22.02.21.png](https://qiita-image-store.s3.amazonaws.com/0/258841/6aee011c-25a4-254b-a4f2-f8ca14095d8e.png)

## まとめ

2018年最後の記事はなんだかんだお世話になっているtmuxのご紹介でした。
ステータスラインだったり、プラグインについても書きたかったが力尽きたので特にしていません。

## 参考リンク

https://qiita.com/succi0303/items/cb396704493476373edf