Ultisnips 中使用参数的可选行
Optional lines in Ultisnips using parameters
我正在尝试根据参数在片段中插入一些额外的行。我不确定如何设计这样的片段。
snippet 'mysnip' 'snippets with optional lines'
This snippet line1 is inserted by default
<This line1a should be inserted if parameter1 is true>
This snippet line2 is inserted by default
<This line2a should be inserted if parameter1 is true>
endsnippet
你不能把你的可选行放在你的代码片段引擎将扩展的变量中吗?
如果它不自动连接由空变量生成的空行,您可能必须让您的变量包含换行符并将其放入或行 before/after.
我不是很清楚how/where你想输入你的参数。
一种选择是定义两个代码片段,一个称为 mysnip
,另一个称为 mysnip1
- 在这种情况下,您在代码片段名称中传递参数,这两个代码片段的定义应该直截了当。
另一种选择是只定义一个代码段 mysnip
,然后在该代码段的某处传递参数。一个工作示例可能如下所示:
snippet mysnip1
${1:Change this snippet line to have the text "True" (without quotes).}
This line is always present. `!p
if t[1]=="True":
snip += "A line displayed when has the text True.
`
endsnippet
您可以使用正则表达式触发器伪造它。它仅在您不想在可选参数中包含制表位时才有效:
snippet /mysnip([a-z]*)/ "Optionals" r
this is always here!`!p
if "a" in match.group(1):
snip += "only when a"
if "b" in match.group(1):
snip += "only when b"`
endsnippet
如果您键入 mysnip
,它将只是第一行,mysnipb
第一行和第三行,mysnipab
将是全部。
我正在尝试根据参数在片段中插入一些额外的行。我不确定如何设计这样的片段。
snippet 'mysnip' 'snippets with optional lines'
This snippet line1 is inserted by default
<This line1a should be inserted if parameter1 is true>
This snippet line2 is inserted by default
<This line2a should be inserted if parameter1 is true>
endsnippet
你不能把你的可选行放在你的代码片段引擎将扩展的变量中吗?
如果它不自动连接由空变量生成的空行,您可能必须让您的变量包含换行符并将其放入或行 before/after.
我不是很清楚how/where你想输入你的参数。
一种选择是定义两个代码片段,一个称为 mysnip
,另一个称为 mysnip1
- 在这种情况下,您在代码片段名称中传递参数,这两个代码片段的定义应该直截了当。
另一种选择是只定义一个代码段 mysnip
,然后在该代码段的某处传递参数。一个工作示例可能如下所示:
snippet mysnip1
${1:Change this snippet line to have the text "True" (without quotes).}
This line is always present. `!p
if t[1]=="True":
snip += "A line displayed when has the text True.
`
endsnippet
您可以使用正则表达式触发器伪造它。它仅在您不想在可选参数中包含制表位时才有效:
snippet /mysnip([a-z]*)/ "Optionals" r
this is always here!`!p
if "a" in match.group(1):
snip += "only when a"
if "b" in match.group(1):
snip += "only when b"`
endsnippet
如果您键入 mysnip
,它将只是第一行,mysnipb
第一行和第三行,mysnipab
将是全部。