我正在 Sublime Text 3 中为 C++ 项目使用自定义构建系统。其中一条线看起来像
"-I${HOME}/my_file/include"
Run Code Online (Sandbox Code Playgroud)
问题是它${HOME}没有扩展为实际的/home/user_x,而是扩展为空字符串''。我找不到任何HOME优雅地指定文件夹的方法,而无需编写实际路径。有办法做到这一点吗?即,将 UNIX$HOME变量扩展到主文件夹的实际位置?
您在这里遇到的问题是cmd,shell_cmd和working_dir参数都受到构建系统中变量扩展的影响。
那里没有概述的是,当扩展发生时,这种格式的任何内容都被视为变量,并且未知变量将扩展为空字符串(即没有值)。
因此,Sublime 会看到您的内容${HOME}并尝试扩展它,这无助于从字符串中删除它的值。
解决这个问题最简单、侵入性最小的方法是引用$变量扩展中的字符,以便 Sublime 会忽略它并传递它,shell 可以根据需要扩展它:
{
"shell_cmd": "echo Home is \\${HOME}"
}
Run Code Online (Sandbox Code Playgroud)
或者
{
"cmd": "echo Home is \\${HOME}",
"shell": true
}
Run Code Online (Sandbox Code Playgroud)
请注意,如这些示例所示,您需要使用shell_cmd完整的命令字符串或cmd与shell设置为组合的命令字符串true才能使其工作。
另请注意,由于构建文件是 JSON,因此引用似乎是双倍的。因此,当加载构建时,\\${HOME}Sublime 在内部将其视为\${HOME}(即它“吃掉”了第一级引用),并且最终引用导致 Sublime 将 the 视为$文字而不是特殊的,以便将其传递给 shell ,它扩展了它本身。