这不是你问的,但这些是我迄今为止想出的最好的解决方案。
方法一:贡献观点
您可以register a provider 并在您的package.json 中通过contributing a view 描述vscode 应在何处显示视图,而不是手动显示WebView。
这样,WebView 是一个面板,而不是普通的编辑器窗口。
虽然,最初您只能在侧栏中的一个组中显示此视图。但是用户可以将您的视图拖到他们想要的任何地方。也进入底部面板,然后它将停留在那里。
"contributes": {
"views": {
"explorer": [
{
"type": "webview",
"id": "calicoColors.colorsView",
"name": "Calico Colors"
}
]
},
}
这里是完整的示例:https://github.com/microsoft/vscode-extension-samples/tree/master/webview-view-sample
方法 2:编辑器组命令
a) 通过更改编辑器布局
这是一个有点老套的解决方案,如何在当前活动的编辑器下方打开一个编辑器。
正如您已经注意到的那样,直接控制这种行为似乎是不可能的。
但是我们可以执行用户可以执行的所有命令。因此,我们还可以更改编辑器布局,从而影响ViewColumns 的显示位置。
假设最初只有一个编辑器组处于打开状态(ViewColumn.One),我们可以通过将编辑器布局更改为“两行”来更改 vscode 显示第二列的位置(ViewColumn.Two)。
vscode.commands.executeCommand('workbench.action.editorLayoutTwoRows')
const panel = vscode.window.createWebviewPanel(
WebViewPanel.viewType,
'Web View Title',
vscode.ViewColumn.Beside,
...
);
但是,一旦多个编辑器可见,这肯定会变得棘手。而且我还没有看到任何方法来找出当前处于活动状态的布局。
似乎也无法找出当前使用了多少列。因为TextEditor.viewColumn 最多只返回ViewColumn.Three 和
vscode.window.visibleTextEditors 确实(顾名思义)只列出 TextEditors 而不是 WebViews 等...
b) 将编辑器移动到下面的组
此外,还有一些命令可以移动编辑器组。因此,我们可以在当前活动的视图列中打开 WebView,然后将其移动到下面的组(workbench.action.moveEditorToBelowGroup)。可悲的是,这有其自身的缺点。新的编辑器组不一定会使用全宽。
默认的 keybindings.json 似乎有一个所有可能命令的列表。即使是那些没有绑定任何默认热键的,仍然在底部列为 cmets。
// - workbench.action.editorLayoutSingle
// - workbench.action.editorLayoutThreeColumns
// - workbench.action.editorLayoutThreeRows
// - workbench.action.editorLayoutTwoByTwoGrid
// - workbench.action.editorLayoutTwoColumns
// - workbench.action.editorLayoutTwoColumnsBottom
// - workbench.action.editorLayoutTwoRows
// - workbench.action.editorLayoutTwoRowsRight