zshの設定ファイルの読み込み順序と使い方Tipsまとめ

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

設定ファイルの種類と読み込み順序

読み込み順を確かめるには実際に各設定ファイルを作ってそのファイル上でファイル名をechoしてみれば良い

ログインシェルの場合(iterm2起動時,SSH,TMUX,SCREENなど含む)

zshenv > zprofile > zshrc > zloginの順で、
それぞれglobalを読み込んだ後で、localを上書き読み込み

ちなみに以下の〜は環境変数\$ZDOTDIRがあればそれが使われて、なければ\$HOME(つまり〜)が使われます。

\$HOME以外に置きたい場合には\$ZDOTDIRを指定しましょう。
#指定するとgit管理も楽ちんになりますね

  1. global) /etc/zshenv
  2. local ) ~/.zshenv
  3. global) /etc/zprofile
  4. local ) ~/.zprofile
  5. global) /etc/zshrc
  6. local ) ~/.zshrc
  7. global) /etc/zlogin
  8. local ) ~/.zlogin

インタラクティブシェルの場合(iterm2上でbashやzshと打った場合)

zshenv > zshrc

  1. global) /etc/zshenv
  2. local ) ~/.zshenv
  3. global) /etc/zshrc
  4. local ) ~/.zshrc

シェルスクリプト実行の場合

zshenv

  1. global) /etc/zshenv
  2. local ) ~/.zshenv

ログアウトする場合

ログアウトするときだけはlocal→globalの順
zlogout

  1. local ) ~/.zlogout
  2. global) /etc/zlogout

設定ファイルの使い分け

local(~/.xxxx)とglobal(/etc/xxx)

特定ユーザー(自分)のみ有効にしたい場合にはlocalで記述
すべてのユーザーで有効にしたい場合にはglobalで記述

ただしglobalはlocal設定で上書きされてしまうので、必ず設定されるかは保証されない

zshenv

順序からもわかるようにどんな場合でも必ず最初に読み込まれる。
ログインシェル、インタラクティブシェル、シェルスクリプトのどの場合でも必要な環境変数などはここに記述するのが良い。

影響範囲が広くなることから特に目的がなければここに設定を記述するのは推奨されない。

例)

  • $PATH
  • $EDITOR
  • $PAGER
  • $ZDOTDIR

zprofile

ログインシェルの場合に1度だけ読み込まれる。
つまりインタラクティブシェルやシェルスクリプトでは不要だけどログインシェルの時だけ必要な設定をする場合にはここに記述するのが良い。

zshrc

ログインシェルとインタラクティブシェルの場合だけ読み込まれる。
シェルスクリプトでは不要な場合に記述する。
一般的に紹介されている記事ではこの設定ファイルにいろいろ記述することが多い。

困ったらここに記述してみて問題が出てきたらちゃんと場所を考えるという運用でも問題ないかもしれない。

zlogin

ログインシェルの場合だけ読み込まれる。
zprofileと一緒なのだが、重要なのはzshrcの後に読み込まれるということ。
ちなみにzprofileとzloginを一緒に使うことはあまり想定されていないらしい。
どちらか一方を使うイメージかな

zlogout

シェルからexitする前に読み込まれる。
最後に定型的な処理をさせたい場合にはここに記述する。

Zsh 設定ファイルTips

スクリプトが大きくなってきたらコンパイルしましょう

カスタマイズしていくとだんだんファイルが大きくなってきます。
ファイルが多く、とくにスクリプト系が増えると読み込みにも時間がかかってしまい快適さが失われてしまいます。

そんな時は、コンパイルをしましょう。

$ zcompile ~/.zshrc

これを実行すると.zshrc.zwcができます。
このファイルは、zshで自動的に読み取られるようになっています。

ファイル変更を完治して自動的にコンパイルすれば楽ちんですね。

環境に合わせて設定ファイルを分割し読み込む量を最小限にしましょう

開発で、OSXとLinuxなど複数使い分けることはよく有りますが、完全に別の設定ファイルを準備していたら管理が手間なのでできれば統一したいところです。

ただ環境依存の設定なんかもあるので完全に統一は困難でも有ります。

そういう時は共通ファイルと個別ファイルと言う形でファイル分割しておき、環境に応じて共通ファイルから個別ファイルを読み込むということを実施すれば、ファイル管理や読み込み時間も必要最小限で済みます。

以下は、個別ファイルを${OSTYPE}毎に読み分けている例です。
darwinはmacのことだと思ってください。

# .zshrc
case ${OSTYPE} in
    darwin*)
        source ~/.zshrc.darwin
        ;;
    linux*)
        source ~/.zshrc.linux
        ;;
esac

共通設定は、.zshrcにそのまま書いてもいいし、別ファイルに分けても構いません。

参考になりそうなmanページの一覧

今回関係ないものも含んでいますがいくつか列挙しときます。

コマンド 内容
man zsh zshの概要
man zshall zsh manページのまとめ
man zshbuiltins zsh ビルトインコマンド概要
man zshcalsys zshのカレンダーシステム概要
man zshcompsys zshのコマンドライン補完の概要
man zshexpn zsh展開の概要
man zshmisc 文字通り雑多な詰め合わせ(パイプ、リダイレクト等)
man zshoptions zshで設定可能なオプション一覧
man zshparam zshの変数関係の記号や使い方
man zshzle zshのコマンドラインエディタ概要