创建 VSCode 片段时,如何将变量转换为首字母大写(如 TitleCase)?
When creating a VSCode snippet, how can I transform a variable to title-case (like TitleCase)?
https://code.visualstudio.com/docs/editor/userdefinedsnippets#_placeholdertransform
我的目标是在插入的片段的上下文中自动设置 class 名称。 VSCode 本身不支持 class 或方法名称,但它支持文件名。
我的文件名非常模仿 class 名称:
foo-bar.ts
对于 class FooBar
。
这是我当前的代码片段,其中我可以使用 VSCode 提供的本机 "capitalize" 语法将 "foo-bar"
转换为 "Foo-bar"
。
TM_FILENAME_BASE
是一个本地变量,它提取不带扩展名的文件名:
"My Snippet": {
"scope": "typescript",
"prefix": "snippet",
"body": [
"() {",
"\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/capitalize}/}.FIELD.);",
"}",
"",
"[=11=]"
],
"description": "Creates a function wrapper for a model's attribute."
}
我想将 "foo-bar" 转换为 "FooBar"。
试试这个:
"My Snippet": {
"scope": "typescript",
"prefix": "snippet",
"body": [
"() {",
// "\treturn this.get(${TM_FILENAME_BASE/([a-z]*)-*([a-z]*)/${1:/capitalize}${2:/capitalize}/g}.FIELD.);",
"\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}.FIELD.);",
"}",
"",
"[=10=]"
],
"description": "Creates a function wrapper for a model's attribute."
}
EDIT :2018 年 10 月,\pascalcase
转换被添加到 vscode - 请参阅
commit,但尚未添加到文档中(截至本次编辑之日)。我在上面添加了更简单的转换,它完成了 PascalCase 转换。
已添加演示,在第一个文件名大小写(test-bed-snippets.xxx
) 之后使用剪贴板只是为了便于演示各种可能性。
另见 snippet transform to CamelCase
认为用另一个例子来补充 Mark 的出色回答可能会有用。
在我的例子中,我想取一个名字 - 作为 selected 文本 - 并将其转换为 Swift 代码,该代码将实例化一个新的 class 传入变量名称和电子邮件地址。
所以例如我 select 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}/} = 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"
}
https://code.visualstudio.com/docs/editor/userdefinedsnippets#_placeholdertransform
我的目标是在插入的片段的上下文中自动设置 class 名称。 VSCode 本身不支持 class 或方法名称,但它支持文件名。
我的文件名非常模仿 class 名称:
foo-bar.ts
对于 class FooBar
。
这是我当前的代码片段,其中我可以使用 VSCode 提供的本机 "capitalize" 语法将 "foo-bar"
转换为 "Foo-bar"
。
TM_FILENAME_BASE
是一个本地变量,它提取不带扩展名的文件名:
"My Snippet": {
"scope": "typescript",
"prefix": "snippet",
"body": [
"() {",
"\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/capitalize}/}.FIELD.);",
"}",
"",
"[=11=]"
],
"description": "Creates a function wrapper for a model's attribute."
}
我想将 "foo-bar" 转换为 "FooBar"。
试试这个:
"My Snippet": {
"scope": "typescript",
"prefix": "snippet",
"body": [
"() {",
// "\treturn this.get(${TM_FILENAME_BASE/([a-z]*)-*([a-z]*)/${1:/capitalize}${2:/capitalize}/g}.FIELD.);",
"\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}.FIELD.);",
"}",
"",
"[=10=]"
],
"description": "Creates a function wrapper for a model's attribute."
}
EDIT :2018 年 10 月,\pascalcase
转换被添加到 vscode - 请参阅
commit,但尚未添加到文档中(截至本次编辑之日)。我在上面添加了更简单的转换,它完成了 PascalCase 转换。
已添加演示,在第一个文件名大小写(test-bed-snippets.xxx
) 之后使用剪贴板只是为了便于演示各种可能性。
另见 snippet transform to CamelCase
认为用另一个例子来补充 Mark 的出色回答可能会有用。
在我的例子中,我想取一个名字 - 作为 selected 文本 - 并将其转换为 Swift 代码,该代码将实例化一个新的 class 传入变量名称和电子邮件地址。
所以例如我 select 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}/} = 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"
}