エンジニアですよ!

頑張れ俺くん、巨匠と呼ばれるその日まで

MacVimにzshの環境変数読み込ませる方法

golangでGo!

MacVimでGoを書こうとしたら、補完きかなかったり色々あれであれ〜?と思ってたら、そもそもfiletype設定されてないし、runtimepathにGoの諸々が入っていない。

これはおかしい。terminalから起動したら普通にうまくいくのに!

ちなみにgo用のvimの最低限の設定は、Vimを使ったGo言語開発手法とかVimでGoのコードを書くときにやっておきたいこととかをみればすぐできます。

で、この設定を完了しているので、端末上で起動したvimだと普通に補完が効いている

しかし、MacVimになるともうそもそもgoだけどgoじゃない。no ftになってる

なんでかな、と思って色々見ていると、$GOROOTと$GOPATHがどうやらMacvimでは設定されていない。

で、調べてみるとやはりありました。

https://github.com/b4winckler/macvim/wiki/Troubleshooting#for-zsh-users

The problem is caused by /etc/zshenv, which (somewhat erroneously) resets the PATH for every zsh instance, not just login shells. MacVim, running in a non-interactive shell, gets a PATH variable that has the OS X system paths but is missing user-defined paths.

zshenvがpathをzshインスタンスごとにリセットしちゃうからMacVimはユーザー定義のpathを読み込まないでシステムパスしか読み込まないんみたい(多分)

解決

上のページの手順通りで解決した。

$ sudo mv /etc/zshenv /etc/zprofile # zshenvをzprofileに
$ touch ~/.zprofile
$ cat ~/.zshrc | grep "export" >> ~/.zprofile # ここはwikiだとgrep "export PATH"になってるけどPATH以外も欲しいので"export”にしてる
$ echo "typeset -U name_of_the_variable" >> ~/.zshrc  # .zshrcと.zprofileを2重に読み込まないため

これでMacVimでもGoGoできる!