Ultisnips中的可选行使用参数

时间:2016-02-21 22:00:08

标签: vim vim-plugin ultisnips

我正在尝试根据参数在片段中插入一些额外的行。我不确定如何设计这样的片段。

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

3 个答案:

答案 0 :(得分:1)

我不清楚您想要输入参数的方式/位置。

一个选项是定义两个代码段,一个名为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 $1 has the text True.
`
endsnippet

答案 1 :(得分:1)

你可以使用正则表达式触发器伪造它。它只适用于您不希望在可选参数中使用tabstops的情况:

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

答案 2 :(得分:0)

你不能把你的可选行放在你的代码片段引擎扩展的变量中吗?

如果它没有自动加入由空变量产生的空行,你可能必须让你的变量包含换行符并放在它之前/之后。