如何在sublime-build文件中指定$ HOME文件夹?

时间:2017-11-13 16:04:29

标签: c++ sublimetext3

我在Sublime Text 3中使用自定义构建系统来进行C ++项目。其中一行似乎是

"-I${HOME}/my_file/include"

问题是${HOME}没有扩展到实际的/home/user_x,而是扩展为空字符串''。我找不到任何方式来优雅地指定HOME文件夹,而无需编写实际路径。有办法做到这一点吗?即,将UNIX $HOME变量扩展到主文件夹的实际位置?

2 个答案:

答案 0 :(得分:3)

您在此处遇到的问题是构建系统中的shell_cmdworking_dir${HOME}参数为all subject to variable expansion

没有概述的是,当扩展发生时,这种格式的任何内容都被视为变量,未知变量被扩展为空字符串(即没有值)。

因此,Sublime会看到您的$并尝试展开它,这无助于从字符串中删除它的值。

最容易和最少侵入性的方法是引用变量扩展中的{ "shell_cmd": "echo Home is \\${HOME}" } 字符,以便Sublime忽略它并传递它,shell可以在适当的时候扩展它:

{
    "cmd": "echo Home is \\${HOME}",
    "shell": true
}

shell_cmd

请注意,如这些示例所示,您需要将cmd与完整的命令字符串一起使用,或shell将命令字符串与true一起设置为\\${HOME}为了使它能够发挥作用。

另请注意,引用似乎加倍,因为构建文件是JSON。因此,当加载构建时,Sublime会在内部将\${HOME}视为$(即它"吃掉"第一级引用),最终引用会导致Sublime对待{{1}}作为一个文字,而不是特殊的,以便它将被传递给shell,它会自己扩展它。

答案 1 :(得分:0)

您可以尝试将命令编写到shell脚本并从Sublime运行脚本。我不确定Sublime是否支持此功能,但shell脚本应该找到并展开$ HOME和任何其他变量。