在 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)