Catalinaのzshカスタマイズ備忘録

# MacBook Air(2020)を買いました
2012 MidのMacBook Air、なぜか"p"だけ打てなくなったり。「もう使用の限界。気力もなくなり」（千代の富士) MacBook Air(2020)に買い替えました。
※嬉しくてただの自慢ですのでスルーしてください。

## Terminalがbashからzshに
MacBook Air(2020)はmacOS Catalina(10.15)となり、Terminalの標準shellがbashからzshに変更されました。

https://mac-ra.com/catalina-zsh/

で、こちら⬇

https://qiita.com/kinchiki/items/57e9391128d07819c321

を読んで大いに刺激をうけ、zshのカスタマイズに挑んだ次第であります。
以下ほぼこのQiitaのまんまですが、ところどころCatalinaで補完した内容となっております。

## デフォルトのTerminal
![zsh01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/e1532154-173a-b256-1c13-255332a5cedf.jpeg)
うん…だめだわ。
とりあえずbrewは使えるようにしといてね。

## まずはフォントRictyから
参考:

https://qiita.com/mktktmr/items/5481eac60b96c80cc262

Rictyの他に、派生フォントRicty Discordもインストールされます。

```sh:
$ brew tap sanemat/font
$ brew install ricty
$ cp -f /usr/local/opt/ricty/share/fonts/Ricty*.ttf ~/Library/Fonts/
$ fc-cache -vf
```
#### ついでにRicty Diminishedも
参考:

https://qiita.com/ponsuke0531/items/0709f1e73a9cb1df55de

```sh:
$ brew tap homebrew/cask-fonts
$ brew cask install font-ricty-diminished
```
## 次にTerminalのテーマIceberg
http://cocopon.github.io/iceberg.vim/
![iceberg.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/e0251141-ac44-65e1-d110-85b734916677.jpeg)
のっけからサイトがカッチョいい！

こちら

http://cocopon.github.io/iceberg.vim/

の一番下にある「Iceberg for macOS」の[Download]をクリックしてTerminalのテーマをダウンロード。

zipを解凍すると"iceberg.terminal"というTerminalテーマが出てくるので、Terminalの環境設定から読み込む。正直これで起動させてもあんまりパッとしません。後からわかりますから。

で、フォントをRictyにします。DiminishedでもDiscordでも、お好きなのをどうぞ。

## zshのフレームワークPreztoのインストール
```sh
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
```
ユーザーディレクトリ以下に.zpreztoディレクトリができる。
次にシンボリックリンクを色々と張る。

```sh:
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```
ls -laすると何やらzsh系の設定がzprezto以下にシンボリックリンクを張っているのがわかります。

```sh:
lrwxr-xr-x   1 zooiiooz  staff     39  4 28 21:53 .zlogin -> /Users/zooiiooz/.zprezto/runcoms/zlogin
lrwxr-xr-x   1 zooiiooz  staff     40  4 28 21:53 .zlogout -> /Users/zooiiooz/.zprezto/runcoms/zlogout
drwxr-xr-x  13 zooiiooz  staff    416  4 28 21:48 .zprezto
lrwxr-xr-x   1 zooiiooz  staff     42  4 28 21:53 .zpreztorc -> /Users/zooiiooz/.zprezto/runcoms/zpreztorc
lrwxr-xr-x   1 zooiiooz  staff     41  4 28 21:53 .zprofile -> /Users/zooiiooz/.zprezto/runcoms/zprofile
-rw-------   1 zooiiooz  staff    459  4 28 21:27 .zsh_history
lrwxr-xr-x   1 zooiiooz  staff     39  4 28 21:53 .zshenv -> /Users/zooiiooz/.zprezto/runcoms/zshenv
lrwxr-xr-x   1 zooiiooz  staff     38  4 28 21:53 .zshrc -> /Users/zooiiooz/.zprezto/runcoms/zshrc
```

## sorinテーマ
一旦ログインして再度ターミナルを開くとデフォルトテーマのsorinが適用されています。
<img width="446" alt="afterprezto.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/c90ab874-28e9-9277-22b2-328ea000c431.png">
3色3連プロンプト!!!
やだ…カッコいい…。
<img width="446" alt="afterprezto2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/813293a0-3ab5-07da-300b-a5ae70777569.png">
Basicでもこうなの!?

不要なホスト名、ユーザー名が出てこないし、表示具合もいい感じ。Tabを押しなっせ。ディレクトリの補完も良い。

## テーマをsorinからpureに変更してみる
デフォルトテーマはsorinになっています。

```sh:
# 現在のテーマの確認
$ prompt -c
Current prompt theme is:
  sorin
```

他のテーマも見てみましょう。

##### -lオプション
```sh:
$ prompt -l
Currently available prompt themes:
agnoster cloud damoekri giddie kylewest minimal nicoulaj paradox peepcode powerlevel10k powerlevel9k powerline pure skwp smiley sorin steeef adam1 adam2 bart bigfade clint default elite2 elite fade fire off oliver pws redhat restore suse walters zefram
```
何やら色々ありますが、pureに変更してみます。
エディタで.zshrcを編集します。

```sh:
$ nano .zshrc
```
以下を追加します。

```sh:.zshrc
# Customize to your needs...
autoload -Uz promptinit
promptinit
prompt pure #ここがテーマ名になります。
```
変更後はshellの設定を再読み込み

```sh:
exec $SHELL -l
```
pureテーマのプロンプトは2行となっており、非常に見やすい。
しかも、gitの状態もわかるようになっています。
![pure_theme.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/0c6dedd4-84e1-e75d-754d-25de1ae9ae73.jpeg)
しかし、sorinの３連プロンプトも捨てがたい…。ぐぬぬ。
じゃあ、pureの"❯"を"❯❯❯"にしてみますか！

# pureの設定ファイルのカスタマイズ
### sorinの３連プロンプト
まずsorinの3連プロンプトの秘密に迫ってみましょう。
sorinの設定ファイルは
~/.zprezto/modules/prompt/functions/prompt_sorin_setup
にあります。
この中にある、「zstyle ':prezto:module:editor:info:keymap:primary'」の
「format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b'」が3連プロンプトの部分になります。
%B〜%bで囲まれた部分が太字(Bold)、%F{1}%F{3}%F{2}は色の指定です。

```sh:prompt_sorin_setup
  # Set editor-info parameters.
  zstyle ':prezto:module:editor:info:completing' format '%B%F{7}...%f%b'
  zstyle ':prezto:module:editor:info:keymap:primary' format ' %B%F{1}❯%F{3}❯%F{2}❯%f%b'
  zstyle ':prezto:module:editor:info:keymap:primary:overwrite' format ' %F{3}♺%f'
  zstyle ':prezto:module:editor:info:keymap:alternate' format ' %B%F{2}❮%F{3}❮%F{1}❮%f%b'
```
### pureの設定ファイル
pureの設定ファイルは
~/.zprezto/modules/prompt/functions/prompt_pure_setup
ですが、
~/.zprezto/modules/prompt/external/pure/pure.zsh
にシンボリックリンクが張られています。
元ファイルはこちらなので、こちらをバックアップしてから編集します。

```sh:~/.zprezto/modules/prompt/external/pure
$ cp pure.zsh pure.zsh_bak
$ nano pure.zsh
```
さてプロンプト❯は何箇所あるでしょうか。

```sh:
$ cat pure.zsh_bak | grep ❯
	prompt_pure_state[prompt]=${PURE_PROMPT_SYMBOL:-❯}
	prompt_pure_state[prompt]=${${KEYMAP/vicmd/${PURE_PROMPT_VICMD_SYMBOL:-❮}}/(main|viins)/${PURE_PROMPT_SYMBOL:-❯}}
		prompt	 "${PURE_PROMPT_SYMBOL:-❯}"
```
"PURE_PROMPT_SYMBOL:-❯"
というのが３箇所ありますね。
これを
"PURE_PROMPT_SYMBOL:-%B%F{1}❯%F{3}❯%F{2}❯%f%b"
に一気に変換します。
nanoだと^W + ^Rで。
３箇所置換が終わったら保存終了してshellを再起動

```sh:
$ exec $SHELL -l
```
![pure_sorin.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82975/6a813d30-9677-8b6d-115c-4ca797d5ef2e.jpeg)
３色３連プロンプトのpureになってますね！

### ※カスタマイズ
syntax-highlightingとautosuggestionsのmoduleを有効にしてみる。
.zpreztorcを編集します。
以下を必ずpromptより前に持ってくる。
  'syntax-highlighting' \
  'autosuggestions' \


```sh:.zpreztorc
# 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'
```