您可以使用 sn-p 和键绑定来做到这一点。
在你的 sn-p 文件中:
"return object": {
"prefix": "_ro",
"body": [
"$TM_SELECTED_TEXT",
// "\treturn { ${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b.*(\\n)*/$1, /g} }",
"${TM_CURRENT_LINE/^(\\s*).*$/$1/}return { ${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\}\\s)|(\\}))/$1${3:+, }/g} }",
],
"description": "Return Object"
},
还有一些您选择的键绑定:
{
"key": "alt+b",
"command": "editor.action.insertSnippet",
"args": {
"name": "return object"
}
},
sn-p 看起来毛茸茸的,但大部分都是微调,也许你可以不用它。注释代码将产生:
return { name, age, height, location, } // 注意最后一个条目后额外的,。
我将解释完整的转换:
"${TM_CURRENT_LINE/^(\\s*).*$/$1/}return { ${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\}\\s)|(\\}))/$1${3:+, }/g} }",
第一部分 ${TM_CURRENT_LINE/^(\\s*).*$/$1/} 只是插入与您在选择的最后一行之前相同数量的空白以用于缩进。
这部分${TM_SELECTED_TEXT/\\s*const\\s+(.*)\\b[^\\}]*((\\}\\s)|(\\}))/ 将变量/函数名称、您的“姓名”、“年龄”等放入正则表达式的捕获组 1。
regex101 demo
该正则表达式末尾的[^\\}]*((\\}\\s)|(\\})) 部分用于确定是否有另一个行条目,如果有,则将, 添加到变量列表的末尾。因此,如果最后有 }\s 将进入捕获组 3。如果最后只有 } 并且您的选择中没有其他以下行将是捕获组 4 并且不会有捕获组 3 .
这很重要,因为${3:+, } 是一个条件转换,它表示是否有组 3 - 最后一个条目不会有,因为选择中它后面没有换行符 - 如果有组 3 添加,。所以完整的正则表达式转换会产生
return { name, age, height, location }
因此,为了使缩进和逗号正确,并且在 vscode 中进行必要的双重转义,需要进行大量的内务处理。实际的正则表达式非常简单。这是一个演示:
用法:请确保完全选择所需的代码范围 - 就像在演示中一样 - 例如,不要部分选择第一行或最后一行。