如何在 vscode 片段中增加变量,例如行号

How to increment a variable, like the line number, in a vscode snippet

我在 VScode 中有一个多行片段。问题是,TM_LINE_NUMBER 给出了触发片段的行号,我需要将该数字增加 1,以便它等于它实际所在的行号。

"Console_Log_Test": {
  "prefix": "clg",
  "body": [
    "//Debugging (remove)",
    "console.log('Line #${TM_LINE_NUMBER}');"
  ]
},

我该怎么做?

至少有这两个选项:

"Console_Log_Test": {
      "prefix": "clg",
      "body": [
          "//Debugging (remove)",
          "console.log('Line #${1:${TM_LINE_NUMBER}}');"
          // "console.log('Line #${TM_LINE_NUMBER}');"
      ]
}

有了上面至少行号被选中,你可以很容易地自己改变它。

更有趣的是把它做成一个“”,它将完全实现你想要的。

  1. 您将需要类似 multi-command extension 的内容。

  2. 将上面的代码片段更改为:

    "Console_Log_Test": {
    
      "prefix": "clg",
      "body": [
          "console.log('Line #${TM_LINE_NUMBER}');"
      ]
    }
    

所以现在代码片段只打印其中包含 TM_LINE_NUMBER 的行。

  1. 在您的用户设置中:

    "multiCommand.commands": [
    
    {
      "command": "multiCommand.lineNumber",
      "sequence": [
        {
          "command": "type",
          "args": {
            "text": "//Debugging (remove)\n"
          }
        },
        {
          "command": "editor.action.insertSnippet",
          "args": {
            // "langId": "csharp",
            "name": "Console_Log_Test"
          }
        }
      ]
    }
    

现在代码片段实际上是在您想要的行号上触发的。

  1. 在你的keybindings.json:

    {
      "key": "ctrl+alt+l",
      "command": "extension.multiCommand.execute",
      "args": { "command": "multiCommand.lineNumber" }
    },
    

现在 Ctrl-Alt-L 完全按照您的意愿进行操作。设置起来有点麻烦,但却是一种非常强大的学习方法。

[编辑]

我想知道是否有办法让一些 emmet 数学起作用,令人惊讶的是,它确实起作用。

使用此代码段:

 "log line number on second line": {
      "prefix": "clg",
      "body": [
          "//Debugging (remove)",
          "console.log('Line #${TM_LINE_NUMBER}"
      ]
  },

除了最后的 ');

,该片段包含所有内容

现在这个宏:

{
    "command": "multiCommand.lineNumber",
    "sequence": [
      {
        "command": "editor.action.insertSnippet",
        "args": {
          "name": "log line number on second line"
        }
      },
      "editor.emmet.action.incrementNumberByOne",
      {
        "command": "type",
        "args": {
          "text": "');\n"
        }
      }
    ]
  },

会起作用的!!行号将递增 1,然后 ');\n 将添加到该行的末尾。

您可以使用 "editor.emmet.action.evaluateMathExpression" 代替 incrementNumberByOne 命令来进行更复杂的数学运算。

要将行号加 10,请使用

"console.log('Line #${TM_LINE_NUMBER}+11"

在代码段中,"editor.emmet.action.evaluateMathExpression" 代替多命令宏中的 "editor.emmet.action.incrementNumberByOne"