当前行下方 console.log 选择的 VS 代码片段

VS Code snippet to console.log selection beneath current line

这就是我想要实现的(t 在编辑器中被选中):

片段之前:

var t = 'Foobar';

片段之后:

var t = 'Foobar';
console.log('t', t);

我该怎么做? 这是我尝试做的:

"log_selection": {
    "prefix": "cls",
    "body": [
        "console.log('$TM_SELECTED_TEXT', $TM_SELECTED_TEXT);"
    ],
    "description": "Logs selected text"
}

但这只是用片段替换了选定的文本。我想我可以在这里使用 TM_CURRENT_LINE 但我不知道如何处理该行中的剩余文本。

你有什么想法吗?也许片段不可能?如果是这样,我怎样才能达到预期的效果?

谢谢。

扩展 macros(在 1 个键绑定中执行多个命令)。

settings.json:

"macros": {
    "snippetWithDescription": [
        "editor.action.clipboardCopyAction",
        "editor.action.insertLineAfter",
        {
            "command": "editor.action.insertSnippet",
                "when": "editorTextFocus",
                "args": {
                    "snippet": "console.log('$CLIPBOARD', $CLIPBOARD)[=10=]"
                }
        }
    ]
}

keybindings.json:

{
    "key": "ctrl+shift+;",
    "command": "macros.snippetWithDescription"
}

P.S。如果在 snippetWithDescription 的开头添加另一个命令,您甚至可以省略选择部分:"editor.action.addSelectionToNextFindMatch",。只需将光标放在单词旁边并按下热键即可。

我来到这个问题是为了寻找除安装宏扩展之外的解决方案。只要光标位于 var 声明行的末尾 ,您就可以使用代码片段 来完成。该代码段将使用正则表达式:

"log_selection": {
    "prefix": "cls",
    "body": [
        "",
        "console.log('${TM_CURRENT_LINE/var (.+?) =.*$/', /});"
    ],
    "description": "Logs selected text"
}

捕获组 (.+?) 保存您的变量名并放置在 </code> 中。我已经对其进行了测试(这是一件好事,因为它需要进行大量编辑才能获得有效的正则表达式)。您可能希望在设置中设置一个键绑定来触发代码段(但它也可以输入代码段前缀):</p> <pre><code> "key": "alt+c alt+l", // some key combo "command": "editor.action.insertSnippet", "when": "editorTextFocus && !editorHasSelection", "args": { "langId": "js", // ?? optional? "name": "log_selection" // your snippet name }

不幸的是,在我的例子中,我正在尝试更改当前行,所以我可能需要一个宏来 select 该行,以便它被替换。