#python #python-3.x #formatting
Вопрос:
Я пытаюсь передать параметры внутри строки, но по какой-то причине format
функция удаляет переменную часть ( $data
и $test
)
import os
import textwrap
def reformat(template):
#return template
return textwrap.dedent(template).lstrip()
initial = "$data['completitions'] = [$test];"
scopes = 'meta.embedded.block.php, source.php'
tabTrig = 'doc'
template = reformat(
"""
<snippet>
t<content><![CDATA[
t{0}
t]]></content>
t<tabTrigger>{2}</tabTrigger>
t<scope>{1}</scope>
</snippet>
""".format(initial, scopes, tabTrig))
v.run_command("insert_snippet", {"contents": template})
ВЫХОДНОЙ ТОК
<snippet>
<content><![CDATA[
['completitions'] = []; // NOTICE HERE
]]></content>
<tabTrigger>doc</tabTrigger>
<scope>meta.embedded.block.php, source.php</scope>
</snippet>
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ
<snippet>
<content><![CDATA[
$data['completitions'] = [$test]; // NOTICE HERE
]]></content>
<tabTrigger>doc</tabTrigger>
<scope>meta.embedded.block.php, source.php</scope>
</snippet>
Ответ №1:
Похоже, что он может рассматривать $data
и $test
как переменные и разрешать их как пустую строку. Можете ли вы попробовать убежать от каждого $
с помощью «может $
быть» или $$
?
Комментарии:
1. работает, но как мне добавить это в строку, нужно добавить это раньше
addslash().format
2. Извините, вам придется добавить к этому больше контекста. Если вы напечатаете
template
, вы увидите это$data
и$test
будете напечатаны правильно. Я не знаю, чтоv.run_command
делает и гдеaddslash().format
находится.3. Мне нужно добавить на эту сторону
""".format(ESCAPE_FUNCTION(initial), scopes, tabTrig))
функцию только для экранирования$
. v. run_command никак не влияет на то, что она находится в sublime text.4. от чего-то подобного
initial = initial.replace('$', '$')
, помещенного после строки.