I am using MacVim (basically gvim for the mac).
If I open macvim from the command line then my $PATH
variable will be properly set.
If I open macvim via point and click with the finder, the $PATH
variable will NOT be properly set.
Can anyone give me some insight?
Note: I know at least part of my path is set in ~/.bashrc
, but I am not sure where the rest of it is set.
Examples:
If I open macvim from the terminal:
% gvim basic.tex
And then in MacVim I go:
:!echo $PATH
/opt/local/bin:/opt/local/sbin:/sw/bin:/sw/sbin:/Applications/MacVim.app/Contents/M
acOS:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/texbin:/usr/X11R6/bin
This is the right path.
When I open the file with the mouse (in finder)
When I go:
:!echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin
It gives me a little path. Why?
I had this same issue but it only appeared after setting my default shell to zsh like so
export SHELL=/bin/zsh
It seems that there is a bug in the OS X zsh setup. The work around in brief is to merge /etc/zshenv
into /etc/zprofile
. In my case I didn't have a /etc/zprofile
so just moving over the file did the trick:
sudo mv /etc/zshenv /etc/zprofile
This post describes the solution in more detail.
For me, simply creating a new symbolic link from .zprofile to .zshrc did the trick:
ln -s ~/.zshrc ~/.zprofile
The place to set environment variables
on the Mac for GUI applications (those started via loginwindow, the
Finder, etc.) is ~/.MacOSX/environment.plist
Alternately in MacVim you can choose to launch vim processes in a login-shell (look in the preferences).
For more info see this post.
The difference in the PATHs probably has something to do with the difference between a login shell (logging in) and a non-login shell (bringing up a console).
From the bash man page:
When bash is invoked as an interactive login shell ... it looks for ~/.bash_profile...
When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc...
What I did to get around this issue was to add the following code to my ~/.bash_profile
, telling it to source my ~/.bashrc
if it exists:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi