0

我的目标是让 VSCode 在我按下 Ctrl+Shift+I 时插入一个时间戳,如下所示:

[15:03]

目前,以下键绑定让我几乎到了那里:

{
    "key": "ctrl+shift+i",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "[$CURRENT_HOUR:$CURRENT_MINUTE]"
    }
}

问题是休息一小时(我的系统时钟目前是 14:03)。这可能是由于一些夏令时或时区问题,我认为这在 VSCode 上是不可配置的。

我真的不在乎午夜会发生什么,那么是否有一些黑客方法可以对这些变量进行一些数学运算?理想情况下是这样的

{
    "key": "ctrl+shift+i",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "[${$CURRENT_HOUR - 1}:$CURRENT_MINUTE]"
    }
}

当然,目前这只是输出

[${15-1}:06]
4

1 回答 1

1

我刚刚更新了一个扩展Find and Transform,它可以对插入的文本进行数学运算。使用这个简单的键绑定(in keybindings.json):

{
  "key": "alt+r",                 // choose your keybinding
  "command": "findInCurrentFile",
  "args": {    
    "replace": "[$${ return ${CURRENT_HOUR} - 1 }$$:${CURRENT_MINUTE}]"
}

由于没有find,它只会在光标所在的位置插入替换(只要该光标不在单词中或单词旁边)。

这部分$${ return ${CURRENT_HOUR} - 1 }$$表示一个 javascript 操作$${ <some operation here> }$$,在这种情况下获取当前小时并从中减去 1。

从小时减去

你也可以使用replace这样的:

"replace": [
   "$${",

   "const date = new Date();",
   "return new Intl.DateTimeFormat('en-GB', { dateStyle: 'full', timeStyle: 'long' }).format(date)",

   "}$$"
]

它将在光标处插入:

Tuesday, 22 February 2022 at 00:04:52 GMT-7


上一个答案使用宏扩展来运行多个命令:

通常,如果没有真正丑陋的条件替换变换,就无法对片段变量进行数学运算。然而,一些聪明的家伙想出了一种方法来做简单的递增/递减 1(或 10 或 0.1 或这些的倍数和组合!)。

请参阅如何在 vscode 片段中增加变量,例如行号,以及查找数字并替换 + 1。{但似乎没有人注意到。]

在您的情况下,使用宏扩展多命令将其放入您的 settings.json 中:

"multiCommand.commands": [

  {
    "command": "multiCommand.decrementHourInSnippet",
    "sequence": [
      {
        "command": "editor.action.insertSnippet",
        "args": {
          "snippet": "[$CURRENT_HOUR"
        }
      },
      "editor.emmet.action.decrementNumberByOne",
      {
        "command": "editor.action.insertSnippet",
        "args": {
          "snippet": ":$CURRENT_MINUTE]"
        }
      }
    ]
  }
]

为了使 emmetdecrementNumberByOne技巧起作用,您不能在一行中有两个数字,只有一个您想要递减。这就是为什么你的实际片段被分成两半,在减量发生后添加分钟。

现在,在 keybindings.json 中将您选择的键绑定分配给此宏:

{
  "key": "ctrl+shift+i",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.decrementHourInSnippet" }
}

它有效。演示:

在片段中减少小时


当然,正如您所说,您不在乎从哪个0-1哪个是我认为它会在午夜后一个小时做的事情。

于 2020-02-12T20:43:17.510 回答