Используйте пользовательские переменные в системе сборки Sublime Text - PullRequest
0 голосов
/ 14 января 2019

Я настраиваю систему сборки Sublime Text (ST) в macOS. Я хотел бы создать вариант системы сборки, который выводит продукты сборки в папку в моей пользовательской библиотеке, но я не могу найти способ обратиться к этому каталогу.

В документации ST Build System упоминается наличие системных переменных Build, но ни одна из них не позволяет мне обратиться к моему домашнему каталогу.

Есть ли способ использовать пользовательские переменные в системе сборки ST, чтобы я мог как-то вывести путь к домашнему каталогу?

Или есть способ использовать переменную окружения $ HOME?

Я не хочу жестко кодировать домашний каталог в системе сборки, так как я хочу, чтобы его могли использовать разные пользователи.

1 Ответ

0 голосов
/ 15 января 2019

Действительно возможно ввести пользовательские переменные в сборку, но это довольно сложная задача, для которой вам нужно написать Sublime Plugin.

В частности, есть ключ, который вы можете включить в файл sublime-build с именем target, который сообщает Sublime, какую внутреннюю команду он должен выполнить для выполнения сборки. Когда этот ключ отсутствует (что происходит большую часть времени), по умолчанию используется внутренняя команда exec, которая отвечает за большую часть процесса сборки, включая захват и отображение выходных данных на панели, при необходимости вводя фантомы ошибок. и т. д.

Создав свой собственный пользовательский экземпляр WindowCommand и включив target в файл sublime-build, Sublime выполнит вашу команду вместо значения по умолчанию, что позволит вам интерпретировать переменные по своему усмотрению.

Примером такой системы сборки является , доступная здесь , если вы хотите пойти по этому пути. В двух словах, это пользовательская команда, которая раскрывает переменные и затем вызывает внутреннюю команду exec, чтобы фактически выполнить эту работу.

Учитывая все вышесказанное, вы можете использовать переменные окружения в командах напрямую, если хотите, поэтому, если ваша цель - создать папку в известном месте, основанную на переменной окружения, вы можете сделать это без изменений на все.

Подвох в том, что в MacOS и Linux символ $ используется оболочкой для обозначения переменной, но Sublime использует $ для обозначения своих собственных переменных. Таким образом, вам нужно немного «процитировать магию», чтобы заставить вещи работать.

Если вы попытаетесь использовать, например, $HOME для расширения до домашнего каталога, он развернется в пустую строку. Это потому, что когда Sublime готовится выполнить сборку, он расширяет все переменные; переменные, значения которых он не знает, заменяются пустой строкой. Это не поддерживаемая переменная сборки, поэтому она считается пустой.

Решение тогда состоит в том, чтобы «процитировать» знак доллара; \$ говорит Возвышенному не обращаться с ним особо; это позволяет ему передавать $ команде, которая в конечном итоге запускает оболочку.

Однако, если вы попытаетесь , что , вы получите страшную ошибку «No Build System» в строке состояния, и ничего не произойдет. Причина этого в том, что файл sublime-build представляет собой JSON, а в JSON \$ - недопустимая escape-последовательность; таким образом, сборка не загружается, а Sublime ничего не делает.

Существует решение использовать \\$; загрузчик JSON интерпретирует его как косую черту в кавычках, которая внутренне преобразуется в \$, что заставляет Sublime преобразовать его в $ и передать его команде.

Примером этого является следующая простая система сборки, которая отображает ваш домашний каталог на панели сборки:

{
    "shell_cmd": "echo \\$HOME/",
}
...