在neosnippet html片段中生成随机ID

时间:2014-07-27 14:14:57

标签: vim code-snippets

我正在使用neosnippet插件进行代码模板自动完成,我有一个像这样的cutom片段(在html.snip中):

snippet elemhide
    <p><input type="button" onclick="return toggleMe('${1:hideID}')" value="Toggle show/hide"></p>
    <div id="$1">
    </div>

由于这可以在一个html文件中多次使用,因此我必须确保每个hideID都是唯一的。所以我想知道是否可以让vim为我做这项工作,只需生成一个长度为12的随机alph-numeric ID并将其放在那里。

1 个答案:

答案 0 :(得分:2)

Neosnippet的文档says

Vim has a built-in expression evaluation. You can also use this feature inside
of snippets if you use back ticks like in the example below. Here the "%:t"
gets expanded to the name of the current active file and the current time gets
inserted by expanding the output of the strftime command.

    snippet     header
       File: ${1:`expand('%:t')`}
       ${2:Created at: `strftime("%B %d, %Y")`}

AFAIK,Vim并没有内置的方式来生成随机内容,但是,按照真正的UNIX精神,我们可以use external commands来完成工作。

此代码段应该符合您的要求:

snippet elemhide
   <p><input onclick="return toggleMe('${1:`system("date +%s | shasum | base64 | head -c 10 ; echo")`}')"></p>
   <div id="$1">
   </div>

我没有neosnippet,但最初的Snipmate也有这个功能。这个片段:

snippet elemhide
    <p><input onclick="return toggleMe('${1:`system("date +%s | shasum | base64 | head -c 10 ; echo")`}')"></p>
    <div id="$1">
    </div>

给了我这个HTML块:

<p><input onclick="return toggleMe('ZjE5MjJkNT')"></p>
<div id="ZjE5MjJkNT">
</div>

因人而异。