oh-my-zshを使っていて重いと感じている方、preztoはいかが?

  • 443
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

背景

oh-my-zshは大変便利で、便利ではあるけど複雑怪奇なzshの設定を簡単に済ませることができるようになりました。

しかし、気の赴くままにpluginを追加していると、起動が重くなったり補完が重くなったり徐々に使いづらくなってしまいます。初回の起動が重いのはscreenやtmuxを活用してつぎつぎzshを起動・終了している人にはじわじわ効いてきますし、補完が重いのはとてもつらいものです。

また、oh-my-zshのpluginには、元のrepositoryからsourceを持ってきたまま放置されているものもあります。例えば、oh-my-zsh/plugins/zは2014-04-11時点では本家のrupa/zより古く、更新されてないことが伺えます。

oh-my-zshはいろいろつらさもあることは分かった、しかしoh-my-zshを捨てて一からzshを設定するのはつらい……。そんな方はpreztoを試してみてはいかがでしょうか。

preztoとは

preztooh-my-zshと同様、zshを設定するためのframeworkです。機能を設定・追加するplugin機構と、promptを機能的かつおしゃれにするtheme機構があります。

preztoには以下の特長があります。

  • 軽い
    • 起動が軽い
    • 補完も軽い
  • 外部repositoryに依存しているpluginはgit submoduleで管理されている
    • 本家のrepositoryと重複が発生せず、追従しやすい
  • 実装がzshの機能にそっており、綺麗であること
    • hackしやすい

preztoの導入

zshの機能が必要なので、もしzsh以外のshellを使用している場合はzshを起動します。

$ zsh

次にpreztoをsubmodule含め取得します。場所に特にこだわりがなければ、公式に載っている以下のコマンドをそのまま実行します。

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

repositoryをcloneしたら、preztoが用意しているzshの初期設定を設置します。以下のコマンドは下記fileのsymbolic linkを作成します。これまでにzshを使用して設定を書いている方は、まずこれらのfileを退避する必要があります。

  • .zlogin
  • .zlogout
  • .zpreztorc
  • .zprofile
  • .zshenv
  • .zshrc
# 必要に応じて.zhogeを退避
$ mv .zlogin .zlogout .zprofile .zshenv .zshrc <zsh_orig_dir>

# 初期設定のfileを設置
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

ここまできたら、改めてzshを起動し、promptが変わっていることが確認できるかと思います。

preztoの設定

設置した.zpreztorcを読むと、丁寧なcomment付きでテンプレが用意されています。pluginごとに設定項目があり、全てを説明するのは難しいので、ここではpluginの追加手順と、themeの設定方法を説明します。

pluginの追加は.zpreztorczstyle ':prezto:load' pmoduleに記述します。追加できるpluginはprezto/modulesにあるdirectory名を記述します。なお、行末の\は、行が続いてることを示すshellの基本的な記法です。
それぞれのmoduleの機能と設定項目はprezto/modulesからたどると、各pluginにREADMEが丁寧に記述されているので、そちらを確認しましょう。

.zpreztorc
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'prompt'

次にthemeの設定です。前述のpmoduleにpromptを追加していれば、使用できるthemeの一覧をprompt -lで確認することができます。

$ prompt -l
Currently available prompt themes:
minimal nicoulaj peepcode pure sorin steeef adam1 adam2 bart bigfade clint elite2 elite fade fire off oliver pws redhat suse walters zefram

使用するpromptを決めたら、.zpreztorcに以下のように追記します。

.zpreztorc
zstyle ':prezto:module:prompt' theme 'steeef'

名前見てもわからないし、一つ一つ設定して確認するのは面倒!という方は、blogにscreenshotをまとめている方がいるので、こちらを参照しましょう。

Customizing Your Prezto Prompt · Mike Buss

最後に

preztooh-my-zshとくらべてpluginもthemeも少なく、人によっては物足りなく感じるかもしれません。しかし、oh-my-zshを使っていて設定した機能、ほんとうに、使ってますか?
もしあまり活用できていない状態で放置し、しかしその関係で起動が遅くなっているのだとしたら、無意識のうちに不便を許容してしまっているかもしれません。
ここは一度preztoも試してみて、気分転換してみるのも良いのではないでしょうか。

おまけ

preztoにない機能を追加したいときはantigenを併用するといいかも

参考リンク