[Mac]Terminalをカスタマイズする

# はじめに
- 現在使っているMacのTerminal関連のカスタマイズ設定メモ
- 下記を実施している
    1. Terminalの見た目の変更
    2. Shellの変更（zsh）
    3. Terminalの縦分割を有効化

- **本記事は、ほぼ下記の先人たちの知恵を借用してます**

**Before**
![スクリーンショット 2020-04-09 22.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/b3537615-ce8a-fd7d-0670-b0afdd48ae7f.png)

**After**
![スクリーンショット 2020-04-09 21.20.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/627ca623-4cf7-c81f-8b5d-4ef83abdd799.png)



# 1. Terminalの見た目の変更
- [iceberg](http://cocopon.github.io/iceberg.vim/)というテーマがかっこ良さげなのでそれに変更する
- [公式サイト](https://gist.github.com/cocopon/a04be63f5e0856daa594702299c13160/archive/dd2499198fd1f5e1373167769f7da28a7e1a2152.zip)からダウンロードしてローカルに保存する
- `Terminal`を立ち上げ、「環境設定」 > 「プロファイル」からダウンロードした`iceberg.terminal`を読み込む
![スクリーンショット 2020-04-09 22.12.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/ff92f23d-7353-c887-365a-a702b0d0db7f.png)
- 読み込んだ`iceberg`をデフォルトテンプレートに設定する
- ついでに、背景を気持ちばかり透明にしてかっこ良くする
![スクリーンショット 2020-04-09 22.15.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/3809dd91-c003-dc48-6201-5ffe4b3926cb.png)


- ここまでで、こんな感じになる
![スクリーンショット 2020-04-09 22.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/71d86280-ddda-fccf-c477-a7a4340f7b93.png)



# 2. Shellの変更（zsh）
- 長らくbashを使ってきたが、最近は`zsh`が流行りらしいので変更してみた

## 2.1. zshのインストール
```shell
$ brew install zsh
```

## 2.2. zsh-completionのインストール
- zshの補完機能を強化する`zsh-completion`をインストールする

```shell
$ brew install zsh-completion
```

## 2.3. `zsh`を起動する
- 下記コマンドで`zsh`を起動して設定を行っていく

```shell
$ zsh
```

- 以下の表示が出た場合は`1`をタイプする

```shell
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses --- 
```
- 続けて、以下のような表示になるため、`0`をタイプする

```shell
lease pick one of the following options:

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

(2)  Configure the new completion system.  (Recommended.)

(3)  Configure how keys behave when editing command lines.  (Recommended.)

(4)  Pick some of the more common shell options.  These are simple "on"
     or "off" switches controlling the shell's features.

(0)  Exit, creating a blank ~/.zshrc file.

(a)  Abort all settings and start from scratch.  Note this will overwrite
     any settings from zsh-newuser-install already in the startup file.
     It will not alter any of your other settings, however.

(q)  Quit and do nothing else.  The function will be run again next time.
--- Type one of the keys in parentheses ---
```

- そうすると、コメントのみの`~/.zshrc`が作成される
- 後ほど`Prezto`をインストールする際にエラーになるので予め削除しておく）

```shell
$ rm ~/.zshrc
```

## 2.4. `Prezto`をインストールする
- zshの設定フレームワークである、`Prezto`をインストールする（[参考: Prezto](https://github.com/sorin-ionescu/prezto))
- GitHubにあるReadmeを見ながら設定を行っていく

1: `git clone`でモジュールをダウンロード

```shell
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
```

2: 提供されているzsh設定ファイルをコピーして、新しいzsh設定ファイルを作成する

```shell
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```

3: 下記コマンドを実行し、`zsh`起動時に`zsh-completion`を有効にする

```shell
$ echo 'fpath=(/usr/local/share/zsh-completions $fpath)' >> .zshrc
```

## 2.5. zshをログインシェルとして設定する

- `/etc/shells/`にエントリを追加し、`zsh`をログインシェルとして利用可能なように設定する

```shell
$ sudo vi /etc/shells
```

- 一番下の行に、`/usr/local/bin/zsh`を追加する
 
```shell
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/zsh  # <-これを追記
```

- その後、下記コマンドを実行して`zsh`をデフォルトシェルとして設定する

```shell
$ chsh -s /usr/local/bin/zsh
```


## 2.6. `.bash_profile`,`.bashrc`の設定を引き継ぐ

- 下記コマンドを実行して、`bash`の設定を`zsh`に引き継ぐ
```shell
$ cat .bash_profile >> .zprofile
$ cat .bashrc >> .zshrc
```

- source コマンドで反映する

```shell
$ source 
```

## 2.7. `zsh`のプロンプトを変更する
- デフォルトのプロンプトは不要な情報が多く、かつプロンプトと入力ラインの間に改行が欲しいためプロンプトを変更する
- [Pure](https://github.com/sindresorhus/pure)というプロンプトがzsh向けに開発されているため、それを利用する
- `Prezto`の設定ファイル`~/.zpreztorc`を変更することでプロンプトを`pure`に変更することが可能

```shell
$ vi ~/.zpreztorc
```

- zstyle ':prezto:module:prompt' theme 'sorin' の theme の箇所を pure にする

```shell:~/.zpreztorc
・・・
# Set the prompt theme to load.
# Setting it to 'random' loads a random theme.
# Auto set to 'off' on dumb terminals.
zstyle ':prezto:module:prompt' theme 'pure'
・・・
```
## 2.8. 補完機能とシンタックスハイライトを有効にする
- `syntax-highlighting`と、`autosuggestions `を追記して、補完とシンタックスハイライトを有効にする

```shell:~/.zpreztprc
# Set the Prezto modules to load (browse modules).
# The order matters.
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'syntax-highlighting' \
  'autosuggestions' \
  'prompt'
```

## 2.9. 設定を有効にする

- `source`コマンドで設定を有効にしてTerminalを開きなおす
- ログインシェルとしてzshが起動してプロンプトも変更されていることが確認できる

```shell
$ source ~/.zpreztorc
```

![スクリーンショット 2020-04-09 20.29.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/6ed7cc05-3848-25e2-08b6-2eb3d52643f5.png)


# 3. Terminalの縦分割を有効化
- Macデフォルトでは、`Command + D`で横分割されるが、個人的には縦分割の方が使いやすい
- バージョン`4.01`以降の`screen`で実現できるとのことなので、やってみる
- 初期状態ではバージョンが`4.00.03`のため`brew`でアップデートする

```shell
$ screen -v
Screen version 4.00.03 (FAU) 23-Oct-06
```

- インストール完了後、下記コマンドを実行して`screen`を実行する

```shell
$ /usr/local/Cellar/screen/4.8.0/bin/screen
```

- `screen`が起動できたら、下記順番にキー入力を行い画面分割を行う
- `screen`では基本的に`ctrl + a`がコマンド入力開始となる
 - 1: 画面を縦に分割 -> `Ctrl + a + |(パイプ)` 
 - 2: 分割した画面に移動 -> `Ctrl + a + Tab`
 - 3: 分割した画面側でShellを起動 -> `Ctrl + a + c`
- 上記を実施すると下記のように縦分割できる。移動するときは、`Ctrl + a + Tab`で移動できる
![スクリーンショット 2020-04-09 21.20.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245534/6a0ef891-c583-4ef8-ee1e-5e2c17dd4885.png)


# 4. `screen`の諸々設定
- デフォルトでは`screen`は`.zprofile`が読み込まれなかったり、不要なメッセージが出たりで使いにくい
- またデフォルトのEscape Keyが、`Ctrl + a`となっており、行頭移動のコマンドと被っているので変更したい
- `~/.screenrc`ファイルを作成し必要な設定を書き込む


```shell:~/.screenrc
# character-code
defutf8 on
defencoding utf8
encoding utf8 utf8

# Disable undesired message
startup_message off
vbell off

# Chane Escape key
escape ^Bb

# Default shell
shell -$SHELL

# Change preference collor
defbce on
term xterm-256color

# Delete buffer for vim and less
altscreen on

# Status line
hardstatus alwayslastline "%{= cd} %-w%{= wk} %n %t* %{-}%+w %= LoadAVG [%l] "

# Num of scroll line
defscrollback 10000

# Enable mouse scroll
termcapinfo xterm* ti@:te@
```

- 以上を行い、次にscreenを立ち上げると上記が有効になった状態でscreenが起動される



# 参考
テーマ変更関連
- [お前らのターミナルはダサい](https://qiita.com/kinchiki/items/57e9391128d07819c321)
- [気分転換にTerminal.appの配色を変えてみる？暗青系のテーマ「Iceberg」を移植しました](https://cocopon.me/blog/?p=4862)

zsh関連
- [Macでbashからzshへお引越しする方法](https://qiita.com/AirBeans5956/items/6a00443c6118d7d3f5f4)
- [Prezto](https://github.com/sorin-ionescu/prezto)
- [Pure](https://github.com/sindresorhus/pure)

Screen関連
- [黒縁眼鏡は海を飛ぶ - macにてscreenを縦分割する](https://blog.ryoo.cc/entry/2014/01/25/211516)
- [MacのTerminalのScreenを縦分割可能にする](http://katz-lifehack.hatenablog.com/entry/2013/05/24/004431)
- [screenで画面を分割する方法(縦,横)と分割後のショートカットキー](https://qiita.com/zenpou/items/7355092be95d65a43282)
- [.screenrcにこれだけは設定しとけっていうオススメ設定](https://qiita.com/kamykn/items/9939b67e923dbb87f39c)
- [仮想端末screenを使う](http://www.omakase.org/freebsd/screen.html)