VS Code片段到当前行下面的console.log选择

时间:2017-06-29 13:33:25

标签: javascript visual-studio-code vscode-extensions

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

在代码段之前:

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

摘录后:

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

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

{{1}}

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

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

谢谢。

2 个答案:

答案 0 :(得分:4)

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

settings.json

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

keybindings.json

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

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

答案 1 :(得分:0)

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

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

捕获组(.+?)保留您的变量名,并放置在$1中。我已经对其进行了测试(这是一件好事,因为要进行正常的正则表达式需要大量的修改)。您可能需要在设置中设置按键绑定以触发代码段(但也可以输入代码段前缀):

    "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
    }

不幸的是,在我的情况下,我正在尝试更改当前行,因此似乎需要一个宏来选择该行以便将其替换。