在 vscode 个片段中传递键入的文本
Pass typed text inside vscode snippets
阅读 snippets documentation 后,我仍在寻找一种方法,通过在代码段前缀后键入文本来在代码段正文中传递一些文本。
假设我有一个带有 log
前缀的片段,我想将前缀转换为 log(*+)
之类的内容以捕获之后的文本。
如果我键入 loganObject
,截取的内容应该会捕获“anObject”并调用我的代码片段来插入一些文本,例如 console.log ("the value of anObject is: ", anObject);
.
这可能吗?
我认为这是不可能的,因为 vscode 应该认识到我仍在输入代码段的前缀,并且应该捕获前缀后的文本并在代码段正文中使用,但我希望他们意识到了这一点。
这是一个可以满足您需要的键绑定,但您必须先 select 文本 Shift+Home这是该行中唯一的文本。
使用 log.myTextHere
作为匹配的文本,即开头的 log.
只是为了清楚。
在你的keybindings.json
中:
{
"key": "alt+l", // whatever keybinding you want
"command": "editor.action.insertSnippet",
"args": {
// get the extra text into capture group 1
"snippet": "console.log (\"${TM_SELECTED_TEXT/^log\.(.*)/the value of is: \", /});"
}
}
或者,更简单、更灵活的方法是使用我编写的扩展程序 Find and Transform 来执行此操作。使用此键绑定:
{
"key": "alt+y", // whatever keybinding you want
"command": "findInCurrentFile",
"args": {
"preCommands": "cursorHomeSelect", // does the selection for you
"replace": [
"$${",
// log. = 4
"let myVar = '${selectedText}'.substring(4);",
"return `console.log (\"the value of ${myVar} is: \", ${myVar});`",
"}$$"
],
"restrictFind": "line"
}
}
如果您只想使用 log
而不是 log.
,您可以更改 substring(4)
。
阅读 snippets documentation 后,我仍在寻找一种方法,通过在代码段前缀后键入文本来在代码段正文中传递一些文本。
假设我有一个带有 log
前缀的片段,我想将前缀转换为 log(*+)
之类的内容以捕获之后的文本。
如果我键入 loganObject
,截取的内容应该会捕获“anObject”并调用我的代码片段来插入一些文本,例如 console.log ("the value of anObject is: ", anObject);
.
这可能吗?
我认为这是不可能的,因为 vscode 应该认识到我仍在输入代码段的前缀,并且应该捕获前缀后的文本并在代码段正文中使用,但我希望他们意识到了这一点。
这是一个可以满足您需要的键绑定,但您必须先 select 文本 Shift+Home这是该行中唯一的文本。
使用 log.myTextHere
作为匹配的文本,即开头的 log.
只是为了清楚。
在你的keybindings.json
中:
{
"key": "alt+l", // whatever keybinding you want
"command": "editor.action.insertSnippet",
"args": {
// get the extra text into capture group 1
"snippet": "console.log (\"${TM_SELECTED_TEXT/^log\.(.*)/the value of is: \", /});"
}
}
或者,更简单、更灵活的方法是使用我编写的扩展程序 Find and Transform 来执行此操作。使用此键绑定:
{
"key": "alt+y", // whatever keybinding you want
"command": "findInCurrentFile",
"args": {
"preCommands": "cursorHomeSelect", // does the selection for you
"replace": [
"$${",
// log. = 4
"let myVar = '${selectedText}'.substring(4);",
"return `console.log (\"the value of ${myVar} is: \", ${myVar});`",
"}$$"
],
"restrictFind": "line"
}
}
如果您只想使用 log
而不是 log.
,您可以更改 substring(4)
。