【问题标题】:How to specify $HOME folder in sublime-build file?如何在 sublime-build 文件中指定 $HOME 文件夹?
【发布时间】:2018-04-26 09:15:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ sublimetext3


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    您在这里遇到的问题是 cmdshell_cmdworking_dir 参数在构建系统中是 all subject to variable expansion

    这里没有说明的是,当扩展发生时,这种格式的任何东西都被视为变量,未知变量被扩展为空字符串(即没有值)。

    因此,Sublime 会看到您的 ${HOME} 并尝试扩展它,这无益地从字符串中删除了它的值。

    解决此问题的最简单且侵入性最小的方法是在变量扩展中引用 $ 字符,以便 Sublime 将忽略它并传递它,shell 可以在其中适当地扩展它:

    {
        "shell_cmd": "echo Home is \\${HOME}"
    }
    

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

    请注意,如在这些示例中所见,您需要使用带有完整命令字符串的 shell_cmd 或带有命令字符串的 cmd 并结合将 shell 设置为 true 才能使其工作。

    还请注意,由于构建文件是 JSON,因此引用似乎加倍。因此,当加载构建时,\\${HOME} 在 Sublime 内部被视为 \${HOME} (即它“吃掉”第一级引用),最后的引用导致 Sublime 将 $ 视为文字而不是特殊这样它就会被传递给 shell,shell 会自行扩展它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2019-11-26
      相关资源
      最近更新 更多