在 Visual Studio Code (vscode) 上包装选择片段

问题描述 投票:0回答:7

我想在触发时创建一个片段,它将包围给定的文本。目前我的片段是:

{ 
  "Function Creator Helper": {
    "prefix": "_w",
    "body": [
      "public function $TM_SELECTED_TEXT () {",
      "  $1",
      "}",
    ],
    "description": "Creates a function given the text selection"
  }
}

这个结果:

我做的是:

  1. 选择文本。
  2. 写前缀(
    _w
    )
  3. 按 Tab

这个结果:

public function  () {

}

但我很期待

public function person () {

}

关于如何制作此片段或如何正确触发它的任何想法?

visual-studio-code
7个回答
24
投票

https://stackoverflow.com/a/48676522/836330你的例子会工作,从vscode v1.49开始,你有它。 Vscode 代码片段已更新为“记住”您选择的文本,即使您似乎用代码片段前缀覆盖了它。


旧答案:

如果你用热键触发它,你可以使用

$TM_SELECTED_TEXT

{
  "key": "cmd+k 1",
  "command": "editor.action.insertSnippet",
  "when": "editorTextFocus",
  "args": {
    //  "langId": "csharp",
    "name": "Function Creator Helper"
  }
}

14
投票

当前选中的文字显示为

${TM_SELECTED_TEXT}
,而不是
$TM_SELECTED_TEXT

edit:正如下面评论的那样,对于这个特定的用例,情况并非如此


4
投票

我自己也在为此苦苦挣扎。为了让它工作,你唯一需要做的就是按

F1
,运行
Insert Snippet
命令,然后从列表中选择你的片段。


2
投票

${TM_SELECTED_TEXT}
对我也不起作用。

${selectedText}
已添加为代码段编辑器变量: https://github.com/Microsoft/vscode/pull/39483#issuecomment-383552677

例子:

"JS Block Quote": {
    "prefix": "c2",
    "body": [
        "/* ${selectedText} */",
    ],
    "description": "JS Block Quote"
}

此时没有正确记录: https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables

注意: 在多行选择中,

${selectedText}
被截断到第一行。另一种方法是使用剪贴板和
${CLIPBOARD}
变量。 一个额外的步骤:(


2
投票

来自 Mitches 的例子:

"JS Block Quote": {
    "prefix": "c2",
    "body": [
        "/* $TM_SELECTED_TEXT */",
    ],
    "description": "JS Block Quote" }

来自文章:https://code.visualstudio.com/docs/editor/userdefinedsnippets#_variables 文档一定是在发布之前。

这在 vscode v1.30.2 中运行良好


1
投票

如果有人想知道,它对我来说就是这样:

我创建了两个相同的片段,只有当我在 html 或 php 文件中时才匹配(只需在片段文件夹“php.json”和“html.json”中创建两个片段文件,它适用于任何语言)并在其中添加此代码:

   "unicommentary": {
        "prefix": "unicommentary",
        "body": "<?php /* ${TM_SELECTED_TEXT} */ ?> ${0}",
        "description": "Creates a universal comment to disable both html and php."
    }

当您选择一些文本并通过

${TM_SELECTED_TEXT}
命令触发代码片段时,
Insert Snippet
标签起作用,您不能只在选定的文本上书写。

当你想使用它时,在你的片段中选择你想要的文本,按 Ctrl + Shift + P 并选择

Insert snippet
然后,输入你的片段的名称,按回车键就可以了!


0
投票

按 F1。 选择 emmet 选项。然后使用 emmet 快捷方式。例如,要将所选文本插入 decimal 类的跨度中,请键入 span.decimal。这样就可以了

© www.soinside.com 2019 - 2024. All rights reserved.