帮我创建一个vim片段(snipmate)

时间:2011-06-01 15:28:47

标签: vim code-snippets snipmate

假设我有以下代码段:

snippet divt
    <div id="${1:div_id}">
        ${2:'some text'}
    </div>

因此,当我输入divt并点击Tab两次时,“'some text'”应该被选中,当我再次点击tab时,我希望选择“some text”(单引号)。我该怎么办?

编辑1:谢谢你的回答。可能这个例子更有意义:

snippet divt
    <div ${1:id="${2:div_id}"}>
    </div>

有时我想要一个没有id的div,所以我需要能够完全删除id =“div_id”。有时我想拥有一个id,所以我只能更改div_id部分。

2 个答案:

答案 0 :(得分:1)

不幸的是,

SnipMate不支持嵌套占位符,但根据@Benoit的建议,您可以在编辑第二个占位符时使用另一个代码段。不过,一定要带上陀螺。

我不确定你想要用some text vs 'some text'实现什么 - 在这个上下文中,每个html解析器都被完全相同的处理 - 但是我会用简单

snippet div
    <div id="${1:div_id}">
        ${2}
    </div>

只需输入

即可
some text

'

将扩展为(|是插入符号)

'|'

感谢delimitMate或任何其他类似的插件

'some text'

或者可以使用环绕声进行更改

some text|

'some text'

输入

<Esc>v2bS'

使用Surround,您也可以从

开始
some text

选择它
v2e

或类似的东西并输入

S'

添加引号,然后选择

V

并输入

S<div id="div_id">

获取

<div id="div_id">
    'some text'
</div>

或者以其他方式做或者...有人必须写一篇博文,其中包含了在Vim中实现给定任务的所有可能方法。

答案 1 :(得分:1)

我目前正在进行UltiSnips的推广之旅。 UltiSnips的片段看起来像这样:

snippet divt "div" b
<div ${1:id="${2:div_id}"}>
</div>
endsnippet

UltiSnips还附带了snipMate片段的转换器脚本,因此切换应该是无痛的。