設定ファイルの種類と読み込み順序
読み込み順を確かめるには実際に各設定ファイルを作ってそのファイル上でファイル名をechoしてみれば良い
ログインシェルの場合(iterm2起動時,SSH,TMUX,SCREENなど含む)
zshenv > zprofile > zshrc > zloginの順で、
それぞれglobalを読み込んだ後で、localを上書き読み込み
ちなみに以下の〜は環境変数$ZDOTDIRがあればそれが使われて、なければ$HOME(つまり〜)が使われます。
$HOME以外に置きたい場合には$ZDOTDIRを指定しましょう。
#指定するとgit管理も楽ちんになりますね
- global) /etc/zshenv
- local ) ~/.zshenv
- global) /etc/zprofile
- local ) ~/.zprofile
- global) /etc/zshrc
- local ) ~/.zshrc
- global) /etc/zlogin
- local ) ~/.zlogin
インタラクティブシェルの場合(iterm2上でbashやzshと打った場合)
zshenv > zshrc
- global) /etc/zshenv
- local ) ~/.zshenv
- global) /etc/zshrc
- local ) ~/.zshrc
シェルスクリプト実行の場合
zshenv
- global) /etc/zshenv
- local ) ~/.zshenv
ログアウトする場合
ログアウトするときだけはlocal→globalの順
zlogout
- local ) ~/.zlogout
- 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のコマンドラインエディタ概要 |