随着2016年11月(版本1.8)版本的VSCode Snippet Variables现在得到支持,特别是TM_SELECTED_TEXT。
这让我感到高兴,因为我在Sublime Text和TextMate中大量使用了这些。
我无法弄清楚如何让它在VSCode中工作。我已经创建了他们使用的代码片段作为示例:
"in quotes": {
"prefix": "inq",
"body": "'${TM_SELECTED_TEXT:${1:type_here}}'"
}
然后我输入一些文字,突出显示它,这就是事情开始破裂的地方。
想法是突出显示一些文本,运行片段,然后用突出显示的文本替换${TM_SELECTED_TEXT:${1:type_here}}
。我遇到的问题是,要运行代码片段,您需要输入prefix
值(在本例中为inq)来运行覆盖突出显示的文本的片段,这会破坏所有内容。
在Sublime / Textmate中,我从键盘组合中启动了片段,使我的文字突出显示。
在VSCode中,是否有办法使其按原样工作或从Sublime中提供的组合键启动片段?
突出显示单词后,按F1并运行“插入代码段”命令,然后在列表中选择您的代码段。
您还可以通过转到文件>首选项>键盘快捷键来编辑键绑定,并为“editor.action.showSnippets”命令添加一些快捷方式,如下所示:
{
"key": "ctrl+alt+s",
"command": "editor.action.showSnippets",
"when": "editorTextFocus"
}
从v1.20开始,随着新变量$ CLIPBOARD的添加,这变得更加容易,请参阅new snippet variables。因此无需分配和运行快捷方式 - 但您必须保存到剪贴板CTRL-C。
你的例子现在可能是:
"in quotes": {
"prefix": "inq",
"body": "'$CLIPBOARD:${1:type_here}}'"
}
注意不需要括号,如$ {CLIPBOARD}。在我的测试中使用或不使用括号。
根据此主题,您可以通过提供args
将精确的片段分配给键绑定。引导媒体查询的键绑定示例
{
"key": "ctrl+alt+b",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus",
"args": {
"name": "bsup"
}
},
{
"key": "ctrl+alt+shift+b",
"command": "editor.action.insertSnippet",
"when": "editorTextFocus",
"args": {
"name": "bsup_copy"
}
},
摘录示例
"bsup": {
"prefix": "bsup",
"body": [
"@include media-breakpoint-up(md){",
"\t${TM_SELECTED_TEXT}",
"}"
],
"description": "Bootstrap media up"
},
"bsup_copy": {
"prefix": "bsup_copy",
"body": [
"${1:${TM_SELECTED_TEXT}}",
"@include media-breakpoint-up(md){",
"\t${2:${TM_SELECTED_TEXT}}",
"}"
],
"description": "Bootstrap media up + copy selected text"
},
使用来自https://code.visualstudio.com/docs/editor/userdefinedsnippets的文档,我能够自定义片段,我使用'环绕'扩展,并可以将我自己的片段放入settings.json,如下所示:
"html_h3-name": {
"label": "h3",
"description": "wrap by h3 with <a name=''>, top",
"snippet": "<h3><a name=\"${TM_SELECTED_TEXT/[\\s]/-/g}\"></a>$TM_SELECTED_TEXT\n\t<a class=\"small\" href=\"#top\">top</a>\n</h3>"
},
它在VSCode中获取突出显示的代码,并使用名称链接从中创建h3头:
it converts 'aaa bbb ccc' to
<h3><a name="aaa-bbb-ccc"></a>aaa bbb ccc
<a class="small" href="#top">top</a>
</h3>