【问题标题】:When creating a VSCode snippet, how can I transform a variable to title-case (like TitleCase)?创建 VSCode 片段时,如何将变量转换为标题大小写(如 TitleCase)?
【发布时间】:2018-10-18 13:16:16
【问题描述】:

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

我的目标是在插入的 sn-p 上下文中自动设置类名。 VSCode 本身不支持类名或方法名,但确实支持文件名。

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

foo-bar.tsclass FooBar

这是我当前的代码 sn-p,其中我可以使用 VSCode 提供的本机“大写”语法将 "foo-bar" 转换为 "Foo-bar"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”。

【问题讨论】:

    标签: visual-studio-code code-snippets vscode-snippets


    【解决方案1】:

    试试这个:

      "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) 之后使用剪贴板,只是为了方便演示各种可能性。

    另见snippet transform to CamelCase

    【讨论】:

    • 嘿,谢谢!您的代码是否适用于单个 word 文件? foo -> Foo?
    • 现在可以了,我只是将连字符从 + 更改为 *,所以它是可选的。
    • 非常感谢!
    • @Israel 它适用于任意数量的文件名,例如 foo-bar-longer-namefoo_bar_longer_longer_name 或同一文件名中的任何连字符和下划线组合。任何文件扩展名。
    • 天哪,这只是花了我几个小时试图弄清楚,因为文档仍然丢失。谢谢你...
    【解决方案2】:

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

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

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

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

    代码 sn-p 如下:

    "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"
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多