# 返璞归真：终端的基本操作

众所周知，最初的程序员都是在命令行用 vim 写代码的。而即使到了今时今日，命令行也仍然在我们的开发中占据重要地位，譬如我们的每一次 ~~`润射`~~ `run serve`；为了让我们在润的时候更舒爽，也为了更贴近一个真正的程序员，终端命令行的基本操作还是要掌握的。

## 常用操作

- `command` + `j` / `ctrl` + `` ` `` ：这两个命令都可以打开终端；区别是前者打开的是终端所在的底部面板，但因为该面板还有不同的 tab 如输出窗、调试窗等，如果在此之前你切换到了其他 tab，通过 `command` + `j` 打开面板时还是会停留在之前的 tab；而 `ctrl` + `` ` `` 则是打开底部面板并切换到终端 tab；所以后者更好用；但由于 `` ` `` 比较难按，我们可以给配置为 `ctrl` + `,`；对应命令 `workbench.action.terminal.toggleTerminal`
- `command` + `k`：当终端内容过多时可以该命令清屏
- `command` + `\`：对当前终端分屏，适合同时要运行不同的命令的情况
- `option` + `command` + `↑` / `←`：分屏后多屏状态下切换到上一屏，对应命令 `workbench.action.terminal.focusPreviousPane`
- `option` + `command` + `↓` / `→` 分屏后多屏状态下切换到下一屏，对应命令 `workbench.action.terminal.focusNextPane`

可以发现，vscode 切换分屏的组合键是比较复杂的，再因为我们方向键是映射过的，这样一来我们要同时按四个按键；所以，改键势在必行，我们可以把 `command` + `[` / `]` 组合键添加为上面的切换屏的功能，这样一来就方便了。

- `shift` + `option` + `q`：关闭终端，这个命令需要自己配置；对应命令 `workbench.action.terminal.kill`
- `ctrl` + `shift` + `` ` ``：新建终端，但同样按地难受；我们可以添加个组合键 `shift` + `option` + `n` 来达到这个功能；对应命令 `workbench.action.terminal.new`
- `shift` + `command` + `[` / `]`：对于新建了多个终端（非拆分的）时切换不同终端

:::tip 拆分终端和新建终端
感觉区别不大，都是可以让我们对一个项目同时进行多个命令，比如一个用来跑服务，一个用来做其他命令；
唯一感觉有实质区别的就是新建可以建不同的终端，如一个是 `bash` 终端，一个是 `zsh` 终端；
也许在多工作区的情况下有不同（not sure）；
如果有朋友了解的请告知我，十分感谢！
:::

## 如何打开外部终端

当然，肯定有和我一样感想的人：

这破电脑的显示屏已经够小了，还要把 vscode 的命令行面板调出来占用宝贵的位置；况且 vscode 的终端确实食之无味；社区上的命令行工具比他~~不知道高到哪里去了~~。正如我已经彻底放弃了 vscode 的命令行，转投到 [Warp](https://www.warp.dev/) 的怀抱中。既然如此，如果可以在 vscode 中打开系统默认的终端就好了。


在 vscode 中，可以设置默认打开的外部命令行工具，
在 vscode 中，通过 `command` + `k` + `command` + `s`，打开键盘快捷方式面板，搜索 `open terminal` 可以找到打开新的外部终端的快捷键为 `shift` + `command` + `c`；如果你是使用 MacOS 自带终端工具的则到这里就 ok 了。但如果你是和我一样使用 Warp 或 iTerm2 之类的命令行工具的，则需要继续阅读。

通过查看 vscode 命令行相关的设置（设置面板，不是在 `setting.json` 找），在 `用户 - 功能 - 终端` 中可以找到三个设置：

- 自定义要在 Linux 上运行的终端
- 自定义要在 MacOS 上运行的终端
- 自定义要在 Window 上运行的终端

我们可以根据自己的系统直接在对应的输入框输入命令行工具名称，比如 Warp 则输入 `Warp.app`，如果是 iTerm 则为 `iTerm.app`；当然我们也可以点击输入框前面的小齿轮，选择 [复制设置id]，其值为 `terminal.external.osxExec`，然后在 `setting.json` 中设置该值为前面说的如 `Warp.app` 即可。

当你通过该快捷键激活外部命令行时，你还会惊奇发现：vscode 会在当前工作区路径打开的外部命令行！

这多是一件美事啊！

还不快点摆脱 vscode 的命令行？