[Mac]Zshでoh-my-zshからPreztoに切り替える


はじめに

シェル環境はZsh派ということもあり、これまで環境をイイ感じに構築してくれる oh-my-zsh を入れていました。

が、oh-my-zsh インストール後、環境設定もほぼデフォルトの状態で使用。
メンテナンスも満足にしておらず、当時のインストール時の備忘録も残さないまま、勢いで入れてそのままズルズル使用していたので、一発奮起して Prezto に乗り換えてみます。
Prezto - Instantly Awesome Zsh

先人の知恵でたくさん記事があります。参考にさせていただきました。
https://blog.andooown.dev/post/2018/02/prezto/
https://qiita.com/Angelan1720/items/60431c85592fe90fcdd5
https://dev.classmethod.jp/tool/zsh-prezto/

oh-my-zsh や Prezto ってそもそも何なの

oh-my-zsh や Prezto は、Zshでラクに環境構築を行うためのフレームワークです。
一から自分で設定することもできますが、こういったものを利用することで、比較的手軽に環境を構築することが可能になります。

oh-my-zsh はオワコンで古い!とかいろんな意見を見ますが、依然人気は人気みたい。機能豊富だしいろいろできるもんね。
9 Best ZSH configuration frameworks as of 2019 - Slant

前提条件

今回の自分の環境です。
この環境下で Prezto に切り替えていきます。

  • ターミナル: iTerm2 を利用
  • Homebrew/Homebrew Cask によるパッケージ管理
  • oh-my-zsh 適用済み
  • Zsh は Homebrew でインストール済み

完全クリーンな状態から Prezto をインストールする場合

概ね以下のような手順になるかと思います。

  • Homebrew をインストール (入っていない場合)
  • Zsh をインストール

Homebrew の使用に関しては好みがあると思うので、必須ではないです

前段階における注意点

.zshrc などにカスタムで環境設定を入れている場合は既存のものを流用してもいいかも。
わたしはそこまで環境設定を追加していなかったので、完全にリプレースしました。

ただ有事の場合にロールバックができるように、念のため、設定ファイルとヒストリはバックアップを取っておきます。

-> % mkdir bkdir && mv .zsh* bkdir
-> % ll -A bkdir
total 632
-rw-------  1 user  staff   309K  5  6 10:36 .zsh_history
-rw-r--r--  1 user  staff   2.9K 10  4  2018 .zshrc

切り替え手順

oh-my-zsh のアンインストール

アンインストールはコマンドがあります。README参照。

-> % uninstall_oh_my_zsh
Are you sure you want to remove Oh My Zsh? [y/N] y
Removing ~/.oh-my-zsh
Looking for original zsh config...
Switching back to bash
Changing shell for user.
Password for user:
Thanks for trying out Oh My Zsh. It's been uninstalled.

アンインストールが完了しました。
ターミナルを再起動すると、 bash になってます。

$ echo $SHELL
/bin/bash

Prezto のインストール

zshに切り替え。

$ zsh

Prezto のREADMEに書いてあるように、リポジトリをcloneしてきます。

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

以下のコマンドを実行すると、各種設定ファイルのシンボリックリンクが生成されます。
この時点ですでに存在しているファイルがあると、そのファイルに関してはリンクが生成されません。

$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
lrwxr-xr-x  1 user  staff      37  5  6 11:01 /Users/userDir/.zlogin -> /Users/userDir/.zprezto/runcoms/zlogin
lrwxr-xr-x  1 user  staff      38  5  6 11:01 /Users/userDir/.zlogout -> /Users/userDir/.zprezto/runcoms/zlogout
lrwxr-xr-x  1 user  staff      40  5  6 11:01 /Users/userDir/.zpreztorc -> /Users/userDir/.zprezto/runcoms/zpreztorc
lrwxr-xr-x  1 user  staff      39  5  6 11:01 /Users/userDir/.zprofile -> /Users/userDir/.zprezto/runcoms/zprofile
lrwxr-xr-x  1 user  staff      37  5  6 11:01 /Users/userDir/.zshenv -> /Users/userDir/.zprezto/runcoms/zshenv
lrwxr-xr-x  1 user  staff      36  5  6 11:03 /Users/userDir/.zshrc -> /Users/userDir/.zprezto/runcoms/zshrc

.zshrc の設定を流用したい場合

いったん既存ファイルは退避しておいて、差分だけをあとから Prezto の .zshrc に追記する形がいいかも。

試しにdiff取ってみましたが、なんだこれ。。
Prezto は超絶シンプルすぎる環境設定。
中略部分は何十行も oh-my-zsh の設定が入ってる部分です。
やっぱり oh-my-zsh はオーバースペックすぎたかな。

あと .zshrc にベタで書き込まれるパラメーターが多い。
oh-my-zsh のパラメーターファイルみたいなのがどっかにあって、それをincludeするとシンプルになりそうな気がする (主観です

$ diff -u ~/bk_zsh/.zshrc ~/.zshrc                                                  
--- /Users/user/bk_zsh/.zshrc   2018-10-04 13:38:32.000000000 +0900
+++ /Users/user/.zshrc  2019-05-06 10:53:24.000000000 +0900
@@ -1,92 +1,13 @@
-# Path to your oh-my-zsh installation.
-export ZSH=/Users/user/.oh-my-zsh
-
-# Set name of the theme to load.
-# Look in ~/.oh-my-zsh/themes/
-# Optionally, if you set this to "random", it'll load a random theme each
-# time that oh-my-zsh is loaded.
-ZSH_THEME="candy"

 ・・・ 中略 ・・・

+# Executes commands at the start of an interactive session.
+#
+# Authors:
+#   Sorin Ionescu <[email protected]>
+#
+# Source Prezto.
+if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
+  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
+fi
+# Customize to your needs...

インストールが完了したので、ログインシェルを Homebrew の Zsh に変更し、ターミナルを再起動します。

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

補足:ログインシェル変更時のエラー

ログインシェルを変更する時に以下のように non-standard shellとエラーが出てしまう場合。
/etc/shells に Homebrew の Zsh のパスを追記することでエラーを解消することができます。

$ chsh -s /usr/local/bin/zsh
Changing shell for user.
Password for user:
chsh: /usr/local/bin/zsh: non-standard shell
/etc/shells
# 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  // Homebrew の Zsh のパスを追記

再起動後にシェルが変更されていることを確認します。

~ ❯❯❯ echo $SHELL
/usr/local/bin/zsh

oh-my-zsh で入ってたaliasのバックアップ忘れた…と思ったけど、 Prezto インストール後のalias確認したら普段よく使うコマンドの短縮形は入ってるから問題なさそう

テーマの設定

さて、肝心のテーマですが、Prezto にはpromptコマンドというものがあり、オプション -p をつけることでテーマのプレビューが表示されます。

~ ❯❯❯ prompt -p

変更後のイメージがしやすくて良い。

powerlineの人をけっこう見かけるのでpowerlineが人気なのかな。

でもわたしはparadoxにします。
デフォルトがsorinになっているので、 .zpreztorc を編集してコメントアウトor上書きします。

~/.zpreztorc
#zstyle ':prezto:module:prompt' theme 'sorin'
zstyle ':prezto:module:prompt' theme 'paradox'

どのようなテーマがあるかはここを見るとわかりやすいかも。
Customizing Your Prezto Prompt - Mike Buss

テーマ適用時の注意点

上記記事のNoteにyou’ll need a Powerline-patched font.と書いてある通り、paradoxをテーマとして適用する時は、Powerline用のフォントを使わないといけないみたいです。

Powerline用のフォントについてはこちら。
GitHub - powerline/fonts: Patched fonts for Powerline users.

Powerline用のフォントの適用

ということで、わたしは Source Code Pro を選択しました。
フォントのインストール方法はgit cloneだったり諸方法あるのですが、わたしは brew-cask-fonts が入っている環境なので、これを使ってインストールします。

❯ brew cask info font-source-code-pro-for-powerline                                 [12:28:41]
font-source-code-pro-for-powerline: latest
https://github.com/powerline/fonts/tree/master/SourceCodePro
Not installed
From: https://github.com/Homebrew/homebrew-cask-fonts/blob/master/Casks/font-source-code-pro-for-powerline.rb

 ・・・以下略・・・

❯ brew cask install font-source-code-pro-for-powerline

インストールできたら、 iTerm2 のフォントの設定で Source Code Pro for Powerline を選択して完了です。

おわりに

とりあえずこれで使ってみて、もうちょっと便利にしたいなーと思ったら適宜調整していきます。
あと oh-my-zsh の残骸もお掃除しないと…