bashからZshに乗り換え - preztoを使ってプロンプトテーマを変えてみた

# はじめに

最近、仕事で使うMacを新しくしました。
入っていたOSがCatalinaだったため、デフォルトのシェルがZshでした。

どうやら今後もZshのままみたいですし、ならばZshで環境整えよう！と思い立ってセッティングしたときの記録を記事化したものです。

今回はpreztoにしました。
gitコマンドの補完や、branchの補完もしてくれるのでちょうど良いと思ったためです。

何かしらお役にたてたら嬉しいです。

# 環境

* Macbook Pro（2019）
* MacOS Catalina 10.15.7

# 対象読者

* 初心者の方
* Zshでいい感じのテーマ使いたい方
* 補完の設定とか楽をしたい方

# 準備するもの

* ターミナル
* prezto
* Powerline fonts

# ターミナルの設定

お使いのターミナルの色を変更しましょう。

後で変更しても、もちろん良いです。
個人的にはプロンプトのテーマを選ぶときの印象が変わってくると思うので、先にターミナルのテーマを選ぶことをおすすめします。

私は普段はiTerm2を使っています。
環境を変えるついでに、Visual Stadio Codeのターミナルでも業務できるか試してみたかったので、普段のコーディングのことも考えながらテーマを選びました。

|ターミナル|iTerm|Visual Studio Code|
|---|---|---|
|テーマ|Solarized Dark|GitHub Dark|
|イメージ|![builtin_solarized_dark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/b43a45f4-2566-f4cf-1913-a5e2eea2d983.png)|![GitHub_Theme.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/5aa2e64f-c936-379d-e412-adc57e116db6.png)|
|引用|[Iterm2-color-schemes](https://iterm2colorschemes.com/)|[GitHub Theme](https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme)|


# preztoのインストールから設定まで

[prezto公式](https://github.com/sorin-ionescu/prezto)

preztoはZshのフレームワークです。
今回はpreztoをベースに、プロンプトのテーマやコマンドの補完設定を行います。

ちょうどgitのtab補完も設定したかったので、preztoでカバーできそうです。

git cloneをします。

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

cloneができたら下記のコマンドを実行して、Zshの設定ファイルをコピーし、新しいZshの設定を作成します。

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

上手く実行できたら、root直下に下記のファイルができていると思います。

- .zlogin
- .zlogout
- .zpreztorc
- .zprofile
- .zshenv
- .zshrc

たしか、上記のファイルがすでにあったらエラーが出たと思います。
お手持ちのZshの設定をあとで反映したいという方は、バックアップを作成して、元のファイルは削除してからコマンドを実行してください。

## preztoに設定を追加する 

`.zpreztorc` のファイルを開いてください。
大体30行めあたりに下記のコードがあります。

```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' \
  'prompt'
```

このコードの `'prpmpt'` の上に3つ設定を追加しました。
下記の状態になります。

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

ふんわりした記憶で恐縮ですが、 `'prompt'` の上に入れないとだめらしいです :sweat_drops: 
念の為に、`'prompt'` の上に追加しておきましょう。

他にもカスタマイズしたいという方は下記をご参考にしてください。
https://github.com/sorin-ionescu/prezto/tree/master/modules

## デフォルトのエディタをvimにする

`.zprofile`を開いてください。
大体16行めあたりに下記のコードがあります。

```~/.zprofile
#
# Editors
#

export EDITOR='nano'
export VISUAL='nano'
export PAGER='less'
```

デフォルトのエディタがnanoになっているので、vimに変更しておきます。
お好みのものを設定してください。

```diff_shell:~/.zprofile
#
# Editors
#

- export EDITOR='nano'
- export VISUAL='nano'
+ export EDITOR='vim'
+ export VISUAL='vim'
export PAGER='less'
```

## プロンプトのテーマを変更する

preztoが提供しているテーマを選んで変更しましょう。
私は`pure`というテーマにしてみました。

![pure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215239/78b5f57d-2d87-1360-9c61-827dbca41eec.png)

コマンドを打った後に一行空けてくれるのがよいなと思いました。
ただ、Visual Studio Codedeだとターミナルの作業範囲が狭いので、一行のプロンプトテーマもいいなと思っているところではあります。 :thinking: 

このあたりは、もうちょっと使ってみて選び直すなり、やっぱりiTerm2に戻るか考えようと思っています。

### テーマの確認

では、テーマを選んでいきましょう。

`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
```

### テーマのプレビュー

`prompt -p [テーマ名]`でテーマをプレビューできます。

### テーマの設定

`prompt -s [テーマ名]`でテーマを設定できます。

ちなみに`.zpreztorc`の中を書き換えても設定できます。
大体115行目にあると思います。
初期では一番最後が`zstyle ':prezto:module:prompt' theme 'sorin'`になっていると思います。
お好みのテーマに書き換えてください。

```sh:~/.zpreztorc
#
# Prompt
#

# 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'
```

### 補足:Powerline fontsが必要なテーマがあります
agnosterなどの一部テーマではPowerline fontsが必要になります。
それらのテーマを使いたいかたは、インストールしてくださいね。

[Powerline fonts](https://github.com/powerline/fonts)

私は公式にあった下記の手順でインストールしました。

clone

```sh
git clone https://github.com/powerline/fonts.git --depth=1
```

install

```sh
cd fonts
./install.sh
```

clean-up a bit

```sh
cd ..
rm -rf fonts
```

インストール後お使いのターミナルなどでフォントの設定をします。
私はiTerm２と、Visual Stadio Codeの両方に設定して使ってみました。
どちらもPreferences（ショートカット `⌘,` ）の中にフォントの設定があります。

設定が完了したら、文字化けしていたテーマが使えるようになっていると思います。

## ターミナル再起動

設定が終わったら、ターミナルを再起動して設定が反映されているか確認してください。
以上で設定は完了です。

お疲れさまでした！ :sunny: 

# 参考

* [【2020年最新】MacOSでpreztoを導入して快適なターミナル生活を送る｜ProgRiro Blog](https://progriro.net/zsh-prezto/)
* [デザイナーもMacのターミナルを良い感じにしよう｜北田 荘平 / THE GUILD｜note](https://note.com/soohei/n/n8b5b3fed55ca)
* [お前らのターミナルはダサい - Qiita](https://qiita.com/kinchiki/items/57e9391128d07819c321)