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 将是全部。