Sunday, January 23, 2011

解决Mac中Emacs、MacVim不能正确读取PATH的问题

发现我现在的题目真是越来越长了, 越来越有论文开题的范了~

因为安装了MacPort, 我在 “.bashrc” 文件中自定义了 PATH 变量, 但当我打开 “Emacs.app” 时却发现 PATH 变量并没有被正确读取, 最明显的表现就是会找不到我用MacPort安装的程序. 经过一番查找才 发现, 原来是因为Mac OS X中的GUI程序在启动时并不鸟Shell初始化文件, 管你 bash, tcsh, 什么 sh. 在Mac中有一个专门给GUI程序 设置环境变量的地方: ~/.MaxOSX/environment.plist, 这是一个二进制文件, 你可以使用Xcode自带的 “Property List Editor.app” 来查看、修改其中的内容, Mac中还有一个命令 defaults 也可以对这种类型的文件进行读写. 我们可以稍微修改一下 “.bashrc” 文件以便每次自定义好 PATH 变量之后就立即修改 “environment.plist” 文件, 代码如下:

export PATH=...
defaults write ~/.MacOSX/environment PATH "$PATH"

这样当再次打开 “Emacs.app” 时查看到的 PATH 变量就是正确的值了. 同样我在使用 “MacVim.app” 时也遇到了这样的情况, 我本来以为通过上面的方法已经解决, 但… 你懂的, 再次经过一番查找, 很多人也只是推荐上面的方法. 还有 勾选MacVim的 “Preferences” 中的 “Launch Vim processes in a login shell.”, 但在我的MacVim中没有找到这个选项, 应该是新版本取消掉了. 我怀疑这是MacVim的bug (不然为啥 “Emacs.app” 好好的…), 不过貌似也不是所有人都有遇到. 而我现在找到的唯一解决办法是直接从Terminal中执行 “mvim” 命令来启动MacVim, 这样就会继承Shell的环境变量, 不过这也是不得已才想出的临时解决办法, 毕竟我以后就不能直接用Quicksilver来启动MacVim了, 真是遗憾.

综上, Mac的App真够折腾.

No comments:

Post a Comment