Vim中的$ PATH与终端不匹配


10

我使用的是MacVim,当我不从终端(mvim)启动MacVim时,其$ PATH不包含在.bash_profile中设置的内容。它似乎只有默认值/usr/bin:/bin:/usr/sbin:/sbin

我正在运行OS X 10.5.8。即使我可以在.vimrc中手动设置它,也可以,尽管我希望它从与Terminal相同的位置拉出。我尝试遵循一个网站的建议,let $PATH += /blah/foo:/bar/etc但无济于事。

编辑/解决方案:请参阅下面的答案。MacVim可以解决此问题。


Answers:


12

MacVim似乎以忽略普通用户自定义点文件的方式获取$ PATH。

我不能说为什么他们更喜欢这样做,但这似乎是事实。在首选项(在Advanced(高级)选项卡下)中,您可以选择“在登录shell中启动Vim进程”,但这$PATH对我来说只是稍有改善。

据我所知,MacVim使用/usr/libexec/path_helper-依次使用在/etc/paths文件中找到的项目(1)和在/etc/paths.d/目录中找到的其他任何项目(2)。在用户的主目录中进行的任何更改(通过.profile等)都将被忽略。

简而言之,您可以获得OSX的默认值,以及将自身添加到的所有应用程序/etc/paths.d。(例如,MacTex在我的系统上执行此操作。)因此,如果要调整MacVim路径,一种方法是将包含项的文件添加到/etc/paths.d。(/etc/paths从那时起,我就不会直接进行编辑,否则您将面临系统更新撤消更改的风险。)

感谢您让我知道这一点。我打算在MacVim提交愿望清单错误。


我也以为这样,但是我添加了一些东西“ /etc/paths.d/”,它们显示在终端中,但不适用于MacVim。
甜甜圈

实际上,“ / etc / paths”文件中的内容比MacVim路径中的内容更多。
甜甜圈

@Donut:恩,这很奇怪。在我的机器上,如果我向中添加内容/etc/paths.d,则下次启动MacVim时会显示。您要放入哪种格式?我相信它应该是每行一项,每行上有一个$ PATH目录(例如,/ usr / texbin)。
Telemachus

我本来完全想念您的第一段:选择“在登录shell中启动Vim进程”对我有用。看我的答案。
donut

7

顺便说一句,“在登录shell中启动Vim进程”首选项在MacVim中不再可用(至少在v7.3中不可用)。我看到从Finder启动MacVim会得到错误的路径,但是从外壳启动它(如“ mvim”)会获得正确的路径。


3

它不是来自.bash_profile,但可以在.vimrc中使用它:

let $PATH=$PATH . ':/blah/foo'

您必须使用:,否则它将不是正确的PATH变量。


我只是尝试了一下,这似乎并没有改变MacVim的$ PATH。我还在终端(/usr/bin/vim从Apple和/opt/local/bin/vimMacPorts)中用Vim对其进行了测试,这似乎没有必要。终端中的Vim已经选择了由我的点文件提供的正确$ PATH
Telemachus

1
我也尝试了这个,但没有成功。
甜甜圈

2

我不敢相信我以前没有看到过。好吧,我可以相信。无论如何,MacVim都提供了解决此问题的选项。在“首选项”下,仅选中“在登录shell中启动Vim进程”。就是这样,它有效。时髦 愚蠢的我。

哎呀

我无意中写下了这个答案,却没有意识到Telemachus已经给了我正确的答案。将他标记为答案。


很高兴进行了排序
Telemachus,2010年

1

此Mac Dev Center文章可能有用。


无法正常工作。可能做错了。本文建议在应用程序的“信息属性列表文件”中添加“ LSEnvironment”属性,我假设该属性为〜/ Library / Preferences / org.vim.MacVim.plist。我把它做成字典,以“ PATH”(也尝试过“ path”和“ $ PATH”)作为键,并把路径作为字符串值。似乎仍然是从一些神秘的来源中提取PATH。plist文件的屏幕快照
donut

1

我将文件添加到path.d目录没有问题。我添加了一个名为mysql的文件,其内容为:

/ usr / local / mysql / bin [返回]

然后,我将此文件放置在path.d目录下,并将其所有权更改为root:wheel。现在,mysql目录会自动添加到我的$ PATH变量中。

我没有进行全面调查,但可能有必要(a)在行的末尾包含[RETURN],和/或(b)将文件所有权设置为root。



1

我今天遇到了这个。MacVim不再具有“登录外壳”选项,并且为用户特定的设置编辑系统范围的文件是粗略的。

这是仅使用vim选项的解决方案(请参阅:help :!:help shell)。

在您~/.vimrc添加的行

set shell=/bin/bash
set shellcmdflag=-l\ -c

这将使bash您成为(Mac)Vim的默认外壳程序,并将-l标志(登录外壳程序)添加到使用调用的命令中:!{cmd}。执行时:shell,bash作为“不是登录shell的交互式shell”启动。

为了使$PATH工作,你需要有它设置~/.bash_profile:!,并~/.bashrc:shell。(参见INVOCATIONman bash

更新:这在我的另一台计算机上不是必需的,因此可能还有其他原因是根本原因。


1
您可以为zsh做类似的事情。定义$PATH.zprofile,并且包括所述-l标志在任一set shellset shellcmdflag
jladan

0

我对UNIX的了解比对Mac的了解多,因此以下建议可能有效也可能无效。尝试将其放入您的.vimrc文件:

! source ~/.bash_profile

这也许可以解决问题,但有一点需要注意:.bash_profile只可以获取一次。它可能包含一些非幂等命令(仅执行一次的命令)。例子:

$PATH += /blah/foo:/bar/etc

调用的次数越多,获得的内容就越大,冗余度也就越大$PATH。但是,如果这没什么大不了的话,那么对Unix的建议是将一次性命令放入文件中~/.bashrcsource ~/.bashrc.vimrc文件中运行。


采购.bash_profile或.bashrc均无效。我尝试手动运行,:source .bash_profile但是对于文件中的每个命令,它只会出现“不是编辑器命令”错误,并且与.bashrc相同。
甜甜圈

抱歉...我在想什么...您可以尝试!来源.bash_profile
David Berger,2009年

尝试了.bash_profile和.bashrc,但还是没有。这是我在.bash_profile中用于更改PATH的内容:'PATH = / usr / local / bin:/Applications/Espresso.app/Contents/SharedSupport/Tools /:/ Applications / MacVim /:$ PATH' .bashrc:'导出路径= / Applications / MAMP / bin / php5 / bin:$ PATH'。而.bash_profile实际上影响了我的终端会话。
甜甜圈

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.