13

现在支持2016 年 11 月(版本 1.8)版本的 VSCode代码段变量,特别是 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 中可用的组合键启动代码段?

4

4 回答 4

17

在 1.49 中(它在本次编辑的 Insiders' Build 中)您的示例最终将按您的预期工作。请参阅合并的拉取请求

Vscode 现在将“记住”您选择的文本(如果有),并且当您键入片段前缀时,将其插入到TM_SELECTED_TEXT变量中,即使您似乎过度输入了该选定文本。

选定的文本片段


从 v1.20 开始,这变得更容易,因为添加了一个新变量 $CLIPBOARD,请参阅新的代码片段变量。因此无需分配和运行快捷方式 - 但您必须将选择复制到剪贴板CTRL- C

您的示例现在可以是:

"in quotes": {
    "prefix": "inq",
    "body": "'$CLIPBOARD:${1:type_here}'"
}

注意:$CLIPBOARD有效。不需要额外的花括号{$CLIPBOARD}

于 2018-02-08T02:28:12.013 回答
7

突出显示单词后,按F1并运行命令“插入片段”,然后在列表中选择您的片段。

您还可以通过转到File > Preferences > Keyboard Shortcuts来编辑您的键绑定,并向“editor.action.showSnippets”命令添加一些快捷方式,如下所示:

{
    "key": "ctrl+alt+s",
    "command": "editor.action.showSnippets",
    "when": "editorTextFocus"
}
于 2016-12-27T12:05:14.240 回答
2

https://github.com/Microsoft/vscode/issues/17780

根据此线程,您可以通过提供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"
},

UPD:此外-您可以直接定义片段,keybindings.json在某些情况下对我来说似乎更方便

{
  "key": "cmd+shift+c",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
     "snippet": "console.log('${TM_SELECTED_TEXT}', $TM_SELECTED_TEXT$1);"
  }
}
于 2018-07-11T08:32:55.003 回答
1

使用来自https://code.visualstudio.com/docs/editor/userdefinedsnippets的文档,我能够自定义片段,我正在使用“surround with”扩展,并且可以将我自己的片段放入 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> 
于 2019-03-28T16:19:07.647 回答