【问题标题】:How can I insert a snippet on a new line with vscode?如何使用 vscode 在新行中插入代码段?
【发布时间】:2020-01-13 01:54:38
【问题描述】:

我正在尝试为 python 制作一个 vscode sn-p。 假设我有这样一行代码:

my_var = call_some_function()

我想双击 my_var 来选择它,按一个键,它会产生以下结果:

my_var = call_some_function()
LOGGER.debug("my_var: %s", my_var)
<cursor is here>

它也应该适用于表达式,比如我在这一行中选择“x + y + z”并按下键:

call_function(x + y + z)

它应该产生:

call_function(x + y + z)
LOGGER.debug("x + y + z: %s", x + y + z)
<cursor is here>

显然使用调试器更好。但有时你不能使用调试器。

【问题讨论】:

标签: visual-studio-code code-snippets


【解决方案1】:

正如@Alex 的链接所暗示的,我认为您需要使用宏扩展来使其工作。我更喜欢multi-command,因为它有一个可用的间隔延迟(这对于某些宏来说是绝对必要的,但不是你的)。

在您的设置中:

"multiCommand.commands": [

    {
      "command": "multiCommand.debug",

      "sequence": [
        "editor.action.clipboardCopyAction",
        "editor.action.insertLineAfter",
        {
          "command": "editor.action.insertSnippet",
          "args": {
            "snippet": "LOGGER.debug(\"$CLIPBOARD: %s\", $CLIPBOARD)\n$0"
          }
        },
      ]
    }
]

这将首先将您的选择复制到剪贴板,以便稍后由 sn-p 使用。然后在下面插入一个空行并在那里插入sn-p(以防下面的行已经有一些代码)。

使用键绑定触发:

{
  "key": "ctrl+alt+d",
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.debug" }
},

它适用于您的两个示例。

【讨论】:

  • 效果很好,谢谢!太糟糕了,你似乎不能用 sn-ps 做到这一点。我从未听说过 multiCommand。谢谢!
  • "editor.action.jumpToBracket", *2 在 "editor.action.insertLineAfter" 之前,避免在对象、数组中打印 :)
【解决方案2】:

这不是所要求的,但很接近,使用 $CLIPBOARD 变量:

"log-clipboard": {
    "prefix": "log-clipboard",
    "body": [
        "LOGGER.debug('$CLIPBOARD: %s', $CLIPBOARD)",
        "$0"
    ],
    "description": "Log an expression from the clipboard"
}

使用方法:

  1. 选择您要记录的内容并点击复制
  2. 转到您想要记录它的位置
  3. 输入日志剪贴板并回车

非常接近。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多