画面分割したりタブを複数使う方法いろいろ

# 環境
ホストの環境はmacOS Mojaveです。

自分が普段使っている、画面分割やタブを複数開く方法です。
それぞれ組み合わせて使うと便利です。
例えばターミナルのタブを分割->そのうち一つでsshした先のLinuxでtmuxを開く、(残念ながら)tmuxが入っていないLinuxではviの分割機能を使う...など。

# ターミナル

## 特徴
- すぐ使える。
- できることが少ない。
- デフォルトのショートカットが押しにくい。
- ショートカットの割り当てを変更するには、システム環境設定->キーボードから変更する必要があり、メニュータイトル(ペースト、など)をわざわざ打ち込まないと設定できない。

### タブ
- 現在のディレクトリの位置は引き継がれる。

### パネル分割
- 単に、**同じターミナルの画面の別の場所を同時に参照する**というだけの機能。
	- (利用例) 分割-> エラーログや前に打ったコマンドを参照しながら新しいコマンドを打つ-> すぐ閉じる
- 各パネルで別のファイルを編集することは不可能。

|ショートカット|説明|
|:---|:---|
| Command＋t | タブを開く |
|Control＋Tab | タブ間を移動|
|Command＋w | タブを閉じる
|Command＋d | パネルを分割|
|Shift＋Command＋d | パネルを閉じる|


<br>


# Vim(Vi)
## 特徴
- どこにでも入ってるため、すぐに使える。
- `.vimrc`にキーの割り当てを記述できるので、変更が容易かつ管理しやすい(僕は`imap <C-c> <Esc>`くらいしか変更してませんが)。
- デフォルトのショートカットが押しやすい。
- `vimtutor` コマンドを打ち込んで出てきたチュートリアルを一周する程度の準備が最初に必要。
- 分割以外のvimコマンド(移動など)と一貫した規則があるので覚えやすい。
- モード切り替え概念のクセが強い。
- (当たり前だけど)パネル分割のみ可能。

<br>

|コマンド|説明|
|:---|:---|
| :split (:sp) file名 | 水平方向に分割線を引く |
| :vsplit (:vs) file名 | 垂直方向に分割(vertical)|
| :q | 閉じる|
| Control＋w → k | 上側の画面に移動|
| Control＋w → j | 下側の画面に移動|
| Control＋w → h | 左側の画面に移動|
| Control＋w → l | 右側の画面に移動|
| Control＋w → + | 現在の画面を縦に拡大|
| Control＋w → - | 現在の画面を縦に縮小|
| Control＋w → < | 現在の画面を横に縮小|
| Control＋w → > | 現在の画面を横に縮小|


- カッコは短縮系。どちらも使えます。
- +は、シフトと";"を同時入力です。
- たとえば`:sp`まで入力して**タブキー**を押すと、ファイル名の予測が出て入力保管が使えるので便利です。
- Control + wのwはWindowだと覚えると分かり良いです。


# tmux

詳しくは、[A tmux Crash Course](https://thoughtbot.com/blog/a-tmux-crash-course) など参照。

## 特徴
- インストールが必要。
- なんでもできる。
- ssh先のLinuxに入れて使うこともできる。
	- 特に、sessionを残しておくことができるためログアウトしてもまた同じ分割状態で再開することができる。
- `.tmux.conf`に設定を記述することで、どこでも自分の慣れたキーバインドと色味(?)で作業ができる。
	- 設定は比較的わかりやすいし、サンプルは探せばたくさん見つかる。
- 色々できる分、機能が多くてとっつきにくい。
- Session-Window-Paneという階層構造が若干分かりにくい。
	- SessionはTmuxのサーバが立ち上がってる感じ。そこにclientとしてアクセスして使う。session自体も、複数立ち上げることができる。
	- Windowはタブのような単位。sessionの中に含まれる。
	- Paneは分割された画面。windowの中に含まれる。
- ショートカットは、**prefix** というコマンド(デフォルトはcontrol+b)を打ち込み、入力受付状態にしてから目的のコマンド(nなど)を打つ、という形で使う。(vimのctr+wと同じ。)

<br>

- キーバインドの設定をしたり、使えるコマンドを見るには以下を使うと便利。list-keysで出力された表記を真似すれば良い。

```bash
$tmux list-keys
$tmux list-commands
```

たとえば、window移動をprefix -> nではなく prefix -> lに変更したいなら


```bash
# 現在の設定を確認
$tmux list-keys
.........
bind-key    -T prefix       n                next-window
.........
```

```bash:~/.tmux.conf
# ↑の書き方に習い、~/.tmux.confを編集
bind-key -T prefix i next-window

# -T prefix系は以下のようにもかける。
bind i next-window

# 元のバインドを外すなら、それを明示する。
unbind n
```

参考: 自分の設定ファイルはこれです。



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

bind c new-window -c "#{pane_current_path}"

# 画面分割
bind - split-window -vc "#{pane_current_path}"
bind | split-window -hc "#{pane_current_path}"
unbind '"' 
unbind %

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

# 分割画面のサイズ変更
# -rはrepeat. C-bの後、連続でコマンド打つ時必要。
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

set-option -g status-bg "colour232" 
set-option -g status-fg "colour15" 

set-option -g mouse on

# prefix , :でrenameしたwindowの名前を固定する。(defaultは最後のcommandになる)
set-option -g allow-rename off

# コピーモードのときvimのキーバインドを使う。
# setw : set-window-option.
setw -g mode-keys vi

# Setup 'v' to begin selection as in Vim
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 "pbcopy"
```

色の変更方法は
[tmux の status line の設定方法 - Qiita](https://qiita.com/nojima/items/9bc576c922da3604a72b)
を参考にさせていただきました。