在 keybindings.json 中的 VScode 中的 when arg 中是否有检查不活动的终端编辑器?

Is there anyway to check inactive terminalEditors in when arg in keybindings.json in VScode?

如果还没有terminalEditor打开,我想createTerminalEditor

注意:我说的是 terminalEditor 而不是 terminal

所以,我正在寻找一个 when arg,它表示类似 editorAlreadyExists != terminalEditor 的内容,就像 activeEditor 接受 terminalEditor 的字符串一样。

有没有办法实现这个?

这里是activeEditor的例子供参考,但我想检查terminalEditor是否存在于所有已经打开的编辑器中,而不仅仅是一个activeEditor.

  {
    "key": "ctrl+`",
    "command": "workbench.action.createTerminalEditor",
    "when": "activeEditor != terminalEditor"
  },

我看到有一个 when 子句:

terminalEditorFocus: true/false

这看起来没有帮助 除了 因为它不在列表中(通过 Developer: Inspect Context Keys) 当没有终端编辑器打开时。所以我想也许有一个键绑定 when 子句可以利用它。但是我尝试了各种各样的事情,比如它是 null 还是 undefined 或者空字符串或者既不是 true 也不是 false 等等,但没有任何效果。我认为如果键 terminalEditorFocus 不存在,那么根本不会向键绑定解析器传递任何内容,它总是会失败。

您可以提交一个问题,要求使用特定的 terminalEditorExists 类型的 when 条款。


会有另一种方式。目前有一个实验性的 api 可以访问所有打开的选项卡。参见 proposed api. So you could write an extension that checks all the open tabs and fires the workbench.action.createTerminalEditor command if none are a terminalEditor. It works right now in the Insiders Build, but when it will go final I don't know - it seems pretty solid now. Issue: Tab Model API

const tabs = vscode.window.tabs;
const openTerminalEditor = tabs.some(tab => tab.viewId === 'terminalEditor');  // true/false

然后您可以使用 setContext 或 运行 命令设置您自己的上下文键。