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

vso*_*tco 1 c++ sublimetext3

我正在 Sublime Text 3 中为 C++ 项目使用自定义构建系统。其中一条线看起来像

"-I${HOME}/my_file/include"
Run Code Online (Sandbox Code Playgroud)

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

Oda*_*urd 5

您在这里遇到的问题是cmd,shell_cmdworking_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完整的命令字符串或cmdshell设置为组合的命令字符串true才能使其工作。

另请注意,由于构建文件是 JSON,因此引用似乎是双倍的。因此,当加载构建时,\\${HOME}Sublime 在内部将其视为\${HOME}(即它“吃掉”了第一级引用),并且最终引用导致 Sublime 将 the 视为$文字而不是特殊的,以便将其传递给 shell ,它扩展了它本身。