在vim中获取.bashrc时,PATH变量不会更新

时间:2015-01-19 02:10:10

标签: bash vim

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

这是情景:

  • 我打开了两个终端。
  • 我使用命令echo "export PATH=\$PATH:/home/xyz/abc/polyglot/bin" >> ~/.bashrc在一个终端上将新PATH导出到.bashrc,然后关闭终端。
  • 然后我从另一个终端的vim实例运行:! source ~/.bashrc。它毫无怨言地来源。
  • 然后我从vim中输入! echo $PATH。 PATH变量不反映更新的更改。

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

2 个答案:

答案 0 :(得分:4)

每次使用vim:!内部执行shell命令时,vim都会创建一个新的子shell环境。命令完成后,子shell终止,其所有环境都消失。

因此,创建新shell并在该shell中设置PATH的时间并不重要;它只是用来执行echo计数的那个,而且在那个,你还没有找到你的个人资料。

最简单的解决方案是在启动vim之前获取您的个人资料,以便创建的子广告vim将继承$PATH

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

答案 1 :(得分:4)

rici声明的所有内容都是正确的。但是,解决方案实际上很简单:如果在调用Vim之前无法设置PATH,Vim允许您直接编辑当前环境。

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

因此,如果您需要新路径,请将其写入Vimscript文件并从那里开始,而不是采购.bashrc