在开发vscode插件的时候,好几个设计都需要集成终端。
查资料后发现vsocd为开发者提供了丰富的终端API。
结合我自己的需求来展开终端的那些事儿吧:
- 从treeview中点击触发打开一个终端
无关的代码省略:
vscode.window.createTerminal({name: "yu-term"});
看图有点别扭,怎么会在下面?不是我想要的效果。
- 调整下打开位置
vscode.window.createTerminal({name: "yu-term",location:vscode.TerminalLocation.Editor});
打开的位置在vscode.TerminalLocation.Editor
现在的效果ok了。
但是光标不在终端,需要鼠标点击下,继续调整。
- 调整光标
var _terminal = vscode.window.createTerminal({name: "yu-term",location:vscode.TerminalLocation.Editor});
_terminal.show(false);
通过show(false);调整光标到终端。
是否可以初始执行点命令?不用手敲,偷个懒?
- 终端默认执行指定命令
_terminal.sendText(`yutmux`);
通过sendText函数可以在终端中运行命令。
这里我运行了我自己封装tmux的一个脚本命令。
- 获取终端
vscode.window.activeTerminal->当前活跃 的终端
vscode.window.terminals->所有打开的终端
做判断,如果不想不断打开新的终端的话。
- 监听终端的事件
vscode.window.onDidChangeActiveTerminali->当前活跃的终端被改变
vscode.window.onDidCloseTerminal->有终端被关闭
vscode.window.onDidOpenTerminal->有新的终端被打开
有特殊需求可以通过这些监听事件进行处理。
- enjoy!