当前行下方 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 该行,以便它被替换。
这就是我想要实现的(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 该行,以便它被替换。