在 vim 内采购 .bashrc 时 PATH 变量未更新

PATH variable not updating when sourcing .bashrc inside vim

在 vim 中获取 .bashrc 文件不会更新 PATH 变量。

场景是这样的:

如果我打开一个新终端并 echo $PATH ,它会显示更新后的值,这符合预期。但无论我在 vim 中获取 .bashrc 多少次,变量都不会更新。有人可以解释这种行为吗?

每次您从 vim 内部使用 :! 执行 shell 命令时,vim 会创建一个新的子 shell 环境。当命令完成时,subshell 终止并且它的所有环境都消失了。

因此,创建新的 shell 并在 shell 中设置 PATH 的次数并不重要;它只是用于执行 echo 的那个才算数,而在那一个中​​,您还没有找到您的个人资料。

最简单的解决方案是在 启动 vim 之前 获取您的配置文件,这样 vim 创建的子shell 将继承 $PATH.

顺便说一句,.bashrc一般只用于interactivebashshells,而shells vim 创建的不是交互式的。 vim 使用 bash -c 来调用 shell 并传递给它一个字符串来执行,尽管精确的调用是由 shellshellcmdflag 变量控制的。特别是,如果您通过将 -l 添加到 shellcmdflag 中的选项来告诉 vim 创建登录名 shell,那么 bash shell将自动来源 ~/.bash_profile(或 ~/.profile 如果 ~/.bash_profile 不存在);这通常是放置环境设置的更有用的地方。

关于您问题的根源,rici 所说的一切都是正确的。然而,解决办法其实很简单:如果你不能在调用Vim之前设置你的PATH,Vim让你直接编辑当前环境。

:let $PATH=$PATH.":/home/xyz/abc/polyglot/bin"

因此,如果您需要新路径,请将其写入 Vim 脚本文件并从那里获取源代码,而不是获取 .bashrc.