zshがMacで標準shellになったらしいので数時間悩んでみた

# zshがmacの標準shellに！
ここ最近とはいいつつCatalinaに変わってから数ヶ月、zshの設定がめんど...よく分からなかったのでなかなかzshに切り替えることができずCatalinaへの更新をしていませんでしたが、やはり補完機能が欲しいということで三時間ほど考えてみました。
# とりあえずzshを起動
``` .zsh
$ zsh
```
とりあえずこれでzshが起動しました。
しかしこれは起動しただけなので、基本shellがzshに変わったわけではないので注意してください。
一度zshを終了すると再びbashに戻ってしまいます。
とにかく使ってみると、cdの後にtabキーを押し続けると移動先ディレクトリがたくさん表示されました。いやーこれはすごいです！今までbashユーザーだったので正直この補完機能はびっくりしました。
しかし、**alias**をいじっていない分少しめんどくさい感じが否めません。bashユーザー時は使いにくさや見にくさの解消のため**プロンプト**や**alias**を自分でいろいろいじって改造していたので若干使いやすくなっていました。ちなみにプラグインはほとんど使っていませんでした。
というわけで、次はプロンプトを変えてみようと思います。

# プロンプトをいじってみる
今回自分も自分でいろいろいじってみようかなとか考えてたんですけど、コマンドが少し変わっていたのでわかりにくかったこともあり、最初はプラグインを頼ることにしました。自分はプラグインに関してはまったくの無知だったので以下の方の記事を参考にさせていただきました。
*参考ページ
https://qiita.com/mollifier/items/1220c0eeaa93e82f8afc
そんなこんなでとりあえずoh-my-zshを入れればなんとかなりそうだったので,oh-my-zshを使っていきます。
## oh-my-zsh
まずはoh-my-zshをインストールします。インストールするだけであとは自分の好きなプロンプトを選んで名前をoh-my-zshファイルに書き込むことで簡単にプロンプトはいじることができます。
インストールはhomebrewを使えば簡単に行うことができます。
まずはHomebrewがインストールされているかを調べましょう

```
$ brew -v
```
と打ち込むことでHomebrewの現在インストールされているバージョンがでてきます何も表示されず、エラー画面が表示されたらまずはHomebrewをインストールしましょう
インストール方法は公式に記載されているのでそちらをご覧ください。
[Homebrew](https://brew.sh/index_ja)
Homebrewがインストールされたら次は

```
$ brew insatall oh-my-zsh
```
を実行してください。これでoh-my-zshをインストールすることができます。
インストールできたら、好きなプロンプトを選んで、.zshsrcファイルに書くだけでプロンプトを変えることができます。bashの場合.bash_profileにいろいろ書き足さないといけなくかなりめんどくさいです。
oh-my-zshを利用してみて感じたのは自分の好きなフォントや表示形式を選ぶだけなので非常にいい感じ。しかし、あまり気になる人は少ないかもしれませんが、プラグインを利用しているせいかコマンドを打ってから反応するまでのほんの一瞬のラグがあり、自分は非常に気になりました。しかしそ補完機能や見やすさなどは完璧でした。と、自分は思いました。
しかし、ラグをなくすにはやはり自分で書き換えるしかないと思ったのでここからは自分の設定とaliasについて話していこうと思います。
# .zshrcをカスタマイズしよう
基本的なカスタマイズは以下の通りです。
各コードに関しては写真の下に説明をつけているので参照してください

```:.zshrc
#1
autoload -U compinit
compinit
#2
autoload -Uz compinit
compinit
#3
autoload -Uz vcs_info　　　　　　　　　　　　　　　　　　 #VCS(バージョン管理システムから情報を取得するために宣言します)
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true     #formats 設定項目で %c,%u が使用可
zstyle ':vcs_info:git:*' stagedstr "%F{green}!"     #commit されていないファイルがある
zstyle ':vcs_info:git:*' unstagedstr "%F{magenta}+" #add されていないファイルがある
zstyle ':vcs_info:*' formats "%F{cyan}%c%u(%b)%f"   #通常時
zstyle ':vcs_info:*' actionformats '[%b|%a]'        #rebase 途中,merge コンフリクト等 formats 外の表示
precmd () { vcs_info }
#プロンプトへの反映 (表示の改編)
PROMPT='% %D %c%{$reset_color%}'
PROMPT=$PROMPT'${vcs_info_msg_0_} %{${fg[red]}%}%}$%{${reset_color}%} '
#4
alias ls= "ls -G"                                   #lsコマンドを打ったときにディレクトリだけ色付けして表示する
```
### #1
これは補完機能を導入するためのコードです。
これを記述することでtabキーを押すと移動先ディレクトリが多数表示されて選択が可能になります。ちなみにディレクトリ選択は矢印キーでも可能です！
### #2
これはtabキーでディレクトリ選択するときに選択中のディレクトリの背景が色で塗りつぶされて分かりやすくしています！
こんな感じになります<img width="1094" alt="スクリーンショット 2019-12-08 14.45.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468800/c2f0f87a-0d69-1e9e-3b47-18d3b6f4389e.png">
確かに見やすくなりました。しかし色付けされていないので多少見にくいかもしれません。
### #3
お次はgitの設定です
これはエンジニアならば必要不可欠な設定です。
説明はコメントの通りなのですが、追加して説明するとプロンプトの設定をもう少し変えたいという方のために$マークの前の表示設定について説明します。

|パラメータ|内容|表示|
|:-------|:---:|---
|%M|ホスト名|localhost
|%m|ホスト名|localhost
|%n|ユーザ名|username
|%d %/|カレントディレクトリ|root/currentdir
|%~|カレントディレクトリ|~currentdir
|%C|カレントディレクトリ|currentdir
|%c|カレントディレクトリ|currentdir(homedirは表示しない)
|%D|日付|19-12-12　　　書式(y-m-d)
|%W|日付|19/12/12　　　 書式(y/m/d)
|%w|日付|Thu 12　　　　書式(d/d)
|%*|時間|07:00:00　　　書式( h : m : s )
|%T|時間|07:00　　　　  書式( h : m )
|%t %@|時間|07:00PM 　 　 書式()


```
PROMPT='ここに上のパラメータを書き込む'
```
また、PROMPTの**' '**の間に文字列を入力して表示をさせることも可能です。しかし、パラメータなどとの同時使用をする際は間にスペースを入れないと表示されませんので気をつけましょう。
上に表示しているパラメータは自分が知っているものだけですので、他にもあるかもしれませんので調べればもっと色々出てくるかもしれません。

### #4
これはlsコマンドを打ち込んだときにディレクトリだけ色をつけて表示するというaliasです
本来ディレクトリを色付け表示する際はlsの後ろに**-G**を追加入力することで可能ですが、めんどくさいのでそれをlsコマンドにしてしまおうという算段です。
プラグインなど関数指定すれば多分こんアホなalias指定しなくてもできるのですが僕の勉強不足のせいでこんなことになりました。

## こんな感じになりました〜
<img width="1063" alt="スクリーンショット 2019-12-09 18.35.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468800/f3c697e9-ce74-262c-8eb1-b98694555167.png">

<img width="584" alt="スクリーンショット 2019-12-09 18.40.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468800/ef58707e-30de-9d35-014f-da9feaad774f.png">
まあそこそこ見やすくなりましたね〜
プラグインを使っていた時の一瞬のラグは無くなったので違和感なく使えました！
しかし、デザインは質素なものになってしまったのでデザイン性などその他もろもろを考慮するとやはりプラグインが非常に優れたものであることが分かりますね〜
**プラグイン最強！**

# まとめ
とりあえず色をつけたり簡単な背景変化などは自分でも簡単に設定が可能で、シンプルisベストと考える人やshellにめちゃ詳しい人は自分で改造するのに向いているかもしれません。しかし、簡単に使いやすくかつ便利なshellを使いたい人はプラグインを導入するのがいいかもしれません。
ただ気をつけて欲しいのはプラグインは実際に使ってみて僕は使いやすいとかじましたが若干のラグはあります。そこがきになる人は妥協するか自分で魔改造するように心がけてみてください。僕は妥協しようかな〜と考えています...