12

https://code.visualstudio.com/docs/editor/userdefinedsnippets#_placeholdertransform

我的目标是在插入的片段的上下文中自动设置类名。VSCode 本身不支持类或方法名,但它支持文件名。

我的文件名与类名非常相似:

foo-bar.tsclass FooBar.

这是我当前的代码片段,其中我可以转换"foo-bar""Foo-bar"使用 VSCode 提供的本机“大写”语法。 TM_FILENAME_BASE是一个本机变量,它提取不带扩展名的文件名:

"My Snippet": {
    "scope": "typescript",
    "prefix": "snippet",
    "body": [
        "${1}() {",
        "\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/capitalize}/}.FIELD.${3});",
        "}",
        "",
        "$0"
    ],
    "description": "Creates a function wrapper for a model's attribute."
}

我想将“foo-bar”转换为“FooBar”。

4

2 回答 2

17

试试这个:

  "My Snippet": {
    "scope": "typescript",
    "prefix": "snippet",
    "body": [
      "${1}() {",

      // "\treturn this.get(${TM_FILENAME_BASE/([a-z]*)-*([a-z]*)/${1:/capitalize}${2:/capitalize}/g}.FIELD.${3});",

      "\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}.FIELD.${3});",

      "}",
      "",
      "$0"
    ],
    "description": "Creates a function wrapper for a model's attribute."
  }

编辑:2018 年 10 月,\pascalcase转换已添加到 vscode - 请参阅 commit,但尚未添加到文档中(截至本次编辑之日)。我在上面添加了更简单的转换,它完成了 PascalCase 转换。

添加了演示,在第一个文件名大小写 ( ) 之后使用剪贴板test-bed-snippets.xxx只是为了使各种可能性易于演示。

pascalCase 片段演示

另请参阅对 CamelCase 的片段转换

于 2018-10-18T13:46:16.167 回答
0

认为用另一个例子补充马克的出色答案可能会很有用。

就我而言,我想取一个名字——作为选定的文本——并将其转换为 Swift 代码,该代码将实例化一个传入变量名称和电子邮件地址的新类。

因此,例如,我选择John Smith名字、姓氏并转换为:

let johnSmith = User(name: "John Smith", email: "john.smith@foorbar.com")

代码片段如下:

"User": {
        "prefix": "u",
        "body": [
            "\tlet ${TM_SELECTED_TEXT/([a-zA-Z]*) *([a-zA-Z]*)/${1:/downcase}$2/} = User(name: \"${TM_SELECTED_TEXT}\", email: \"${TM_SELECTED_TEXT/([a-zA-Z]*) *([a-zA-Z]*)/${1:/downcase}.${2:/downcase}/}@foobar.com\")\n",
        ],
        "description": "Create User with name and email"
    }
于 2019-08-20T13:00:14.943 回答