这就是我想要实现的目标(在编辑器中选择 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,但我不知道如何处理该行中的剩余文本。
你对此有什么想法吗?使用片段可能不可能吗?如果是这样,我怎样才能达到预期的效果?
谢谢。
答案 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
}
不幸的是,在我的情况下,我正在尝试更改当前行,因此似乎需要一个宏来选择该行以便将其替换。