我不认为你可以在不使用宏或扩展名的情况下在文本上方插入一个片段 - 除了选择是唯一的东西的琐碎情况,我认为你不是这种情况。
使用一些宏扩展,这里是 multi-command,把它放到你的 settings.json 中:
"multiCommand.commands": [
{
"command": "multiCommand.cSharpSummary",
"sequence": [
"editor.action.clipboardCopyAction",
"editor.action.insertLineBefore",
{
"command": "editor.action.insertSnippet",
"args": {
"name": "CSharpSummarySelected"
}
}
]
}
]
并将您的片段放入一些片段文件中:
"CSharpSummarySelected": {
"prefix": "c#-summary-selected",
"body": [
"/// <summary>",
// "/// ${1:$TM_SELECTED_TEXT}",
"/// ${1:$CLIPBOARD}", // this works witheditor.action.clipboardCopyAction, select only
"/// </summary>",
"/// <returns>${2:returns}</returns>"
],
"description": "Inserts Summary for component with selected text as name in C# files"
}
注意:我的代码片段使用$CLIPBOARD
而不是$TM_SELECTED_TEXT
. 这是因为在您选择的文本上方插入一行的行为会取消选择您的选择(即,您通过在上方插入一行会丢失您的选择)。
您只需选择您的变量,而不是实际复制它 - 宏将为您处理复制操作。但是剪贴板现在将在其上包含您的变量,而不是以前的任何变量-这可能会或可能不会被您接受-在宏中,我认为这是不可避免的。
现在宏将不会使用前缀而是使用键绑定来触发。在 keybindings.json 中:
{
"key": "ctrl+alt+b", // whatever keybinding you choose
"command": "extension.multiCommand.execute",
"args": { "command": "multiCommand.cSharpSummary" }
},
现在,当您选择一些文本并使用键绑定触发宏时,您的代码段将插入该行上方,并带有您想要的制表位。见演示:
