いざ tmux


# はじめに

これまでなかなかCLI環境に慣れていなかったので
一年発起してCLI環境で暮らすことにしました。

今回は、tmuxに入門しようと思います。

[dotfiles](https://github.com/Ganariya/dotfiles)

# tmuxとは？

tmuxの説明は
[tmuxを必要最低限で入門して使う](https://qiita.com/nl0_blu/items/9d207a70ccc8467f7bab)がとてもわかり易いです。
こちらを参考にしてみてください＞＜

# .tmux.conf

.tmux.confはtmuxの設定ファイルです。
~/.tmux.confに存在します。

```
# shell
set-option -g default-shell /usr/local/bin/fish

# color
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'

# display
setw -g automatic-rename on
set -g renumber-windows on
set -g set-titles on

# activity
set -g monitor-activity on
set -g visual-activity off

# naviation
bind C-c new-session

# active window
# setw -g window-status-activity-style bg="colour16","underscore",fg="colour45"
setw -g window-status-current-style bright
setw -g window-status-style dim

# index
set -g base-index 1
set-window-option -g pane-base-index 1

# active pain
set -g pane-border-style fg="colour236"

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

# prefix key
set -g prefix C-a
unbind C-b

# history
set-option -g history-limit 10000


# vim pain
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
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

# pain split 
bind | split-window -h
bind - split-window -v

# mouse
set-option -g mouse on
#set -g mouse-select-pane on
#set -g mouse-resize-pane on
#set -g mouse-select-window 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'"

# vim copy
setw -g mode-keys vi
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi V send -X select-line
bind -T copy-mode-vi C-v send -X rectangle-toggle
bind -T copy-mode-vi y send -X copy-selection
bind -T copy-mode-vi Y send -X copy-line
bind-key C-p paste-buffer

# powerline status
set-option -g status on
set-option -g status-interval 1
set-option -g status-justify "centre"
set-option -g status-left-length 300
set-option -g status-right-length 90
set-option -g status-left "#(~/dotfiles/.tmux/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/dotfiles/.tmux/tmux-powerline/powerline.sh right)"

# F
# I index for current window
# W name for current window
set-window-option -g window-status-current-format "#[fg=colour235, bg=colour235]⮀#[fg=colour255, bg=colour102] #F #I  #W #[fg=colour102, bg=colour235]⮀"
set -g status-bg colour239


bind C-[ run '~/path/to/tmux-powerline/mute_powerline.sh left'
bind C-] run '~/path/to/tmux-powerline/mute_powerline.sh right'

# plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-open'
set -g @plugin 'tmux-plugins/tmux-resurrect'


run -b '~/.tmux/plugins/tpm/tpm'
```

ドキュメントや色々なサイトを参考にさせていただきました。
特に設定が必要なのが
powerline statusの`tmux-powerline`と`tmux-plugins`です。

`tmux-powerline`は、下部にpowerlineを表示し
`tmux-plugin`はtmuxでプラグインを使用するために必要です。



<img width="516" alt="スクリーンショット 2020-04-30 22.34.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211482/0a0eff35-f6e6-8027-b647-814367e1ddf1.png">

VimもPowerlineを使っているため画面がffffぐちゃぐちゃなので、あとで改修したいです･･･＞＜

# tmux(外)の操作

- tmuxでセッションを新規作成する

```
tmux
```

もしすでにtmuxに入っているときは

`prefix + c`で新規セッション

- tmuxでセッション一覧を表示する

```
tmux ls
```


- tmuxでセッションを再開する

```
tmux a -t セッション名
```

- tmuxでセッションを終了する

```
tmux kill-session -t セッション名
```

- すべてのセッションを殺す

```
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill
```

# tmux(内)の操作

## 全体

| コマンド |       機能 |
|:-----------------:|:------------------:|
|prefix + ?| コマンド一覧の表示|    
|prefix + w |セッション+window 一覧|      
|prefix + s |セッション一覧|  
|prefix + : |コマンドラインモード|   
|prefix + [ |コピーモード開始|   
| v |コピーモードでコピー開始位置決定|   
| y |ヤンク|   
|prefix + (Ctrl + p) |コピー内容の貼り付け|   

## セッション

| コマンド |       機能 |
|:-----------------:|:------------------:|
|prefix + :, :new|コマンドラインモードで`:new`をして新しいセッションを作る|
|prefix + d |今のセッションから一時抜ける|      
|ctrl + d |今のセッションの削除|   
|prefix + $ |セッション名の変更|   


## ウィンドウ

| コマンド |       機能 |
|:-----------------:|:------------------:|
|prefix + c |新規ウィンドウ |  
|prefix + & |今のウィンドウを消去する|   
|prefix + n |次のウィンドウへ移動する|  
|prefix + p |前のウィンドウへ移動する| 
|prefix + 1~9 |番号のウィンドウに移動|   
|prefix + , |ウィンドウ名の変更|   
|prefix + f |ウィンドウの検索|   

## ペイン

| コマンド |       機能 |
|:-----------------:|:------------------:|  
|prefix + x |今のペインの削除|
|prefix + ｜ |ペインを左右に分割する|   
|prefix + - |ペインを上下に分割する|   
|prefix + hjkl |ペインを移動する|   
|prefix + HJKL |ペインのサイズを変える |   
|prefix + space |ペインをいい感じに調整する|   
|prefix + (Ctrl + o) |ペインを回転させる|   
|prefix + { |上方向にペインを入れ替える|  
|prefix + } |下方向にペインを入れ替える|  
|prefix + z |今のペインの最大化　と　復帰|   
|prefix + q |ペイン番号の表示|   
|prefix + ! |今のペインをウィンドウ化|   
|prefix + :setw synchronize-panes|すべてのペインに同時入力する(トグル式)|


## その他

| コマンド |       機能 |
|:-----------------:|:------------------:|  
|prefix + (Ctrl+s) |すべての状態を保存する (resurrent)|
|prefix + (Ctrl+r) ｜ |すべての状態を復元する (resurrent)|