My External Storage

Aug 15, 2018 - 2 minute read - Comments - vim environment

Vimの:terminalコマンドでzshを開くと.zshrcが読み込まれない #vim #zsh

自分の.zshrc配置が悪かったのでメモ。 zshはログインシェル時とインタラクティブシェル時でロードされるディレクトリが異なる。

TL;DR

  • zshはログインシェル時とインタラクティブシェル時でロードされるディレクトリが異なる
  • Vimの:terminalコマンドではインタラクティブシェルモードで起動される
  • インタラクティブシェルモードでは$HOME/.zshrcなどは読まれない
  • $ZDOTDIR内に.zshrcなどを配置することで回避できる

Vimの:terminalコマンドでzshを開くと.zshrcが読み込まれない

会社のMacを入れ替えたので、一通り環境を移行した。 dotfiles運用していたので、だいたい簡単に終わったのだが、Vimで:terminalコマンドを使うとzshが設定ファイルを読み込んでくれなかった。

This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~/.zsh).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zsh/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses ---

原因:$ZDOTDIR配下に設定ファイルがなかったから

どうやらzshはログインシェルとして起動したときと、コマンドから起動するインタラクティブシェルで設定ファイルの読み方が違うらしい。

http://zsh.sourceforge.net/Doc/Release/Files.html

Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

If ZDOTDIR is unset, HOME is used instead. Files listed above as being in /etc may be in another directory, depending on the installation.

自分の場合は、$ZDOTDIR~/.zshだった(.zshrc内で設定している部分を消してもここになる気がする)。 たしかに$ZDOTDIRはそこに.zshrcなどを配置していなかった。

解決方法 $ZDOTDIR配下に.zshrcへのリンクを貼る

コピペしてファイルを配置するのはメンテ性が良くないのでln -sコマンドで絶対パスのリンクを貼って解決した。

ln -s /Users/budougumi0617/.homesick/repos/dotfiles/home/.zshrc ~/.zsh/
ln -s /Users/budougumi0617/.homesick/repos/dotfiles/home/.zshenv ~/.zsh/

終わりに

いろいろアップデートしていたら、こちらの事象も起きてだいぶ時間がかかってしまった。
なんにせよ、Vimは悪くなかったので疑って申し訳ない気持ち。

関連

関連記事