Macの初期セットアップメモ(1) - terminal,zsh周り

Macが汚れてきたのでクリーンインストールすることに。今後のために初期セットアップ事項をまとめておく。ボリュームが多そうなので複数記事に分けて書いていく。まずは基本の基本。

# 環境情報
MacBook Air (13-inch, Mid 2011)
macOS High Sierra (v10.13.6)

# 文字入力周りの設定
キーボード入力はMac操作の基本中の基本なので、何はともあれまずここを整える。
## Windows風のキー操作を適用する
これをしておくと以下のようなショートカットが有効になる。これに慣れているので基本チェック入れる。MS-IMEで採用されているショートカットなのでWindows風と呼ばれている(多分)。ctrl+tとctrl+iはかなり多用する。

- 環境設定 > キーボード > 入力ソース > Windows風のキー操作をチェック
![スクリーンショット 2018-08-05 13.07.22.png](https://qiita-image-store.s3.amazonaws.com/0/200471/325f039b-5630-4eb4-4e7f-7984474fdd68.png)

| ショートカット | 変換内容 | ファンクションキーで言うと |
|:-:|:-:|:-:|
| ctrl+i | 全角カタカナ | F7 |
| ctrl+u | 全角ひらがな | F6 |
| ctrl+p | 全角英数 | F9 |
| ctrl+t<br>ctrl+o | 半角英数 | F10 |

## fn押さなくてもファンクションキーが使えるようにする
いちいちfnを押さないとF7でカタカナ変換とかできないのは不便なので設定変更。

- 環境設定 > キーボード > F1、F2などのキー...をチェック
![スクリーンショット 2018-08-05 12.17.32.png](https://qiita-image-store.s3.amazonaws.com/0/200471/ed9d5205-d363-d45d-1be5-1a83b3f863b8.png)

## キーのリピートを最速に
リピートで文字を入力することはほぼないけれど、Backspaceで消すときやカーソルを矢印キーやctrl+fとかで移動するときも早い方が良いので最速に設定する。
![スクリーンショット 2018-08-05 12.23.01.png](https://qiita-image-store.s3.amazonaws.com/0/200471/30309fc2-195e-abc6-5e52-8f582d8c963c.png)

設定項目とその説明は以下の通り。

| 項目 | 内容 |
|:-:|:-:|
|キーのリピート |リピートしている時の入力速度。早いとタタタタッと入力される。|
|リピート入力認識までの時間|キーを押しっぱなしにしてからリピートが始まるまでの時間。|



# Terminal周り
## Terminalの色をIcebergにする
以下のサイトを参考に実施
https://cocopon.me/blog/2014/04/iceberg-for-terminalapp/

1. 以下のサイトからIceberg for macOSをダウンロード 
    - https://cocopon.github.io/iceberg.vim/
![スクリーンショット 2018-08-05 12.03.55.png](https://qiita-image-store.s3.amazonaws.com/0/200471/fbe3bfdf-727a-adfb-22a8-90c5ce382898.png)
2. Treminal > 環境設定 > プロファイル > 歯車アイコン > 読み込むでさっきダウンロードしたファイルを選択
![スクリーンショット 2018-08-05 12.07.15.png](https://qiita-image-store.s3.amazonaws.com/0/200471/3918fc43-0b02-3376-812c-7cd4e3883b6a.png)

3. Icebergが追加されているのでそれを選択した状態で左下の「デフォルト」をクリック。これでIcebergがデフォルトで適用されるようになる。
![スクリーンショット 2018-08-05 13.03.57.png](https://qiita-image-store.s3.amazonaws.com/0/200471/b73b1382-da60-f6ed-b7a6-2f8b3d59c32f.png)


## exitしたらウィンドウを閉じるようにする
exitしてもウィンドウが残るが好きじゃないので設定変更。

- terminalの環境設定 > プロファイル > シェル > シェルの終了時を「シェルが正常に終了した場合は閉じる」に変更
![スクリーンショット 2018-08-05 13.03.17.png](https://qiita-image-store.s3.amazonaws.com/0/200471/09f8fc19-cf5a-47da-95b7-83034ab67a3c.png)

# シェルの設定
## ログインシェルをzshにする
デフォルトでzshはインストールされているので以下のコマンドで変更

```
chsh -s /bin/zsh
```

## .zshrcを設定する
[少し凝ったzshrc](https://gist.github.com/mollifier/4979906)を拝借。色つけ、補完機能、プロンプトを複数行にして見やすくといったことをしてくれる。とてもGOOD。

```zsh
# 少し凝った zshrc
# License : MIT
# http://mollifier.mit-license.org/

########################################
# 環境変数
export LANG=ja_JP.UTF-8


# 色を使用出来るようにする
autoload -Uz colors
colors

# emacs 風キーバインドにする
bindkey -e

# ヒストリの設定
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000

# プロンプト
# 1行表示
# PROMPT="%~ %# "
# 2行表示
PROMPT="%{${fg[green]}%}[%n@%m]%{${reset_color}%} %~
%# "


# 単語の区切り文字を指定する
autoload -Uz select-word-style
select-word-style default
# ここで指定した文字は単語区切りとみなされる
# / も区切りと扱うので、^W でディレクトリ１つ分を削除できる
zstyle ':zle:*' word-chars " /=;@:{},|"
zstyle ':zle:*' word-style unspecified

########################################
# 補完
# 補完機能を有効にする
autoload -Uz compinit
compinit

# 補完で小文字でも大文字にマッチさせる
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

# ../ の後は今いるディレクトリを補完しない
zstyle ':completion:*' ignore-parents parent pwd ..

# sudo の後ろでコマンド名を補完する
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin /usr/local/bin \
                   /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin

# ps コマンドのプロセス名補完
zstyle ':completion:*:processes' command 'ps x -o pid,s,args'


########################################
# vcs_info
autoload -Uz vcs_info
autoload -Uz add-zsh-hook

zstyle ':vcs_info:*' formats '%F{green}(%s)-[%b]%f'
zstyle ':vcs_info:*' actionformats '%F{red}(%s)-[%b|%a]%f'

function _update_vcs_info_msg() {
    LANG=en_US.UTF-8 vcs_info
    RPROMPT="${vcs_info_msg_0_}"
}
add-zsh-hook precmd _update_vcs_info_msg


########################################
# オプション
# 日本語ファイル名を表示可能にする
setopt print_eight_bit

# beep を無効にする
setopt no_beep

# フローコントロールを無効にする
setopt no_flow_control

# Ctrl+Dでzshを終了しない
setopt ignore_eof

# '#' 以降をコメントとして扱う
setopt interactive_comments

# ディレクトリ名だけでcdする
setopt auto_cd

# cd したら自動的にpushdする
setopt auto_pushd
# 重複したディレクトリを追加しない
setopt pushd_ignore_dups

# 同時に起動したzshの間でヒストリを共有する
setopt share_history

# 同じコマンドをヒストリに残さない
setopt hist_ignore_all_dups

# スペースから始まるコマンド行はヒストリに残さない
setopt hist_ignore_space

# ヒストリに保存するときに余分なスペースを削除する
setopt hist_reduce_blanks

# 高機能なワイルドカード展開を使用する
setopt extended_glob

########################################
# キーバインド

# ^R で履歴検索をするときに * でワイルドカードを使用出来るようにする
bindkey '^R' history-incremental-pattern-search-backward

########################################
# エイリアス

alias la='ls -a'
alias ll='ls -l'

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

alias mkdir='mkdir -p'

# sudo の後のコマンドでエイリアスを有効にする
alias sudo='sudo '

# グローバルエイリアス
alias -g L='| less'
alias -g G='| grep'

# C で標準出力をクリップボードにコピーする
# mollifier delta blog : http://mollifier.hatenablog.com/entry/20100317/p1
if which pbcopy >/dev/null 2>&1 ; then
    # Mac
    alias -g C='| pbcopy'
elif which xsel >/dev/null 2>&1 ; then
    # Linux
    alias -g C='| xsel --input --clipboard'
elif which putclip >/dev/null 2>&1 ; then
    # Cygwin
    alias -g C='| putclip'
fi



########################################
# OS 別の設定
case ${OSTYPE} in
    darwin*)
        #Mac用の設定
        export CLICOLOR=1
        alias ls='ls -G -F'
        ;;
    linux*)
        #Linux用の設定
        alias ls='ls -F --color=auto'
        ;;
esac

# vim:set ft=zsh:
```

プロンプト複数行とはこんなイメージ(ユーザ名:hoge,コンピュータ名:hogenoMacBook、カレントディレクトリ: ~、の状態)。カレントディレクトリが深くなるとコマンド打つスペースが狭くなるのを防げる。

```zsh
# 普通のプロンプト
hogenoMacBook% 
```

```zsh
# 複数行のプロンプト
[hoge@hogenoMacBook] ~
% 
```

.zshrcを設定してから改めてterminalを開くと以下が出てきた。なぜこのタイミングでこのダイアログが出るのかはわからないが、今後gitは使うのでとりあえずインストールした。
![スクリーンショット 2018-08-05 12.43.50.png](https://qiita-image-store.s3.amazonaws.com/0/200471/f34153d7-294a-3988-926a-e09f7a2b4b7c.png)

## 今後について
データサイエンスの勉強もやっていきたいのでpython3やその他必要なモジュールをインストールしていきます。続きは[Macの初期セットアップメモ(2)](https://qiita.com/cielo1985/items/a39114b2cee42d08defe)へ。