# 踏破铁鞋：vscode 的全局搜索命令

前面的训练中，我们学习了 [vim 的搜索命令](../vim/day-8.md) 以及 [vim-sneak](../vim/day-9.md#插件：vim-sneak);可以说掌握了这两个基本上在单个文件内进行搜索可以得心应手。

但在日常的开发中，我们常常也需要全局地去搜索内容，尤其在你的同事写的~~屎山~~代码中各种方法文件满天飞的时候；vim 无法提供一个这样全局搜索的命令，并且这样的命令也不应该在 vim 上进行，而应该在当前所使用的 IDE 中进行，所以今天我们就来了解一下 vscode 的全局搜索命令（我假设你用的是 vscode，因为我用的 vscode）。

## 全局搜索

通过 `shift` + `command` + `f` 可以激活全局搜索面板并聚焦到搜索框；如果此时在编辑窗里有选中文本，会直接触发全局搜索该文本。

在全局搜索面板移动光标时，略微会有点麻烦；全局搜索面板有多个输入框，输入框区域从上往下是关键词输入框、包含的文件输入框和排除的文件输入框；输入区域下方是结果列表。当我们聚焦搜索面板的时候，可以使用如下快捷键：

- `command` + [方向键]：在输入框区域的输入框直接切换焦点
- `shift` + `command` + `j`：展开 / 隐藏输入框区域，隐藏时只有关键词输入框，展开则显示所有输入框
- `j` / `k` / `h` / `l`：功能和[资源管理器](./day-19.md#移动光标与查看)一致

当我们在搜索结果列表中按下 `l` 打开对应文件后，也可以通过 vim 的[窗口焦点切换命令](../vim/day-15.md#窗口切换)切换回结果列表。

## 快捷搜索符号

这里的符号是指如变量名、方法名之类的（下同）。开发中我们常常需要查看一些方法、变量在何处声明；虽然我们可以通过 vim 的搜索来进行当文件内搜索，也可以通过全局搜索进行整个工作区搜索；但是这样搜索出来的结果会比较混乱，不仅仅不会区分声明处还是调用处，而且可能一些同名的非变量的字符串也会被搜索出来，而且也不便于区分类型；所以 vscode 提供了一种更适合这种场景的快捷键。

### 工作区搜索符号

通过 `command` + `t`，可以在当前工作区中查找当前光标所在的变量的所有同名变量的声明位置（即如果在多个文件中有同名变量，也会显示出来。而且会有不同的图标区分变量还是方法，并可以直接进行文件跳转），也可以在输入框中输入字符进行搜索（此时输入框带 `#` 前缀）。
### 单文件搜索符号

键入 `shift` + `command` + `o` 会激活符号搜索（此时输入框带 `@` 前缀），此时可以在当前文件搜索所有与输入的关键词相关的符号；如果在 `@` 后输入 `:`，还会把搜索到的结果分门别类，区分变量、方法、类型等等；聚焦列表不同项还会直接跳到对应位置。

## 文件查找与切换

有时我们想要打开一个文件，我们知道它的文件名，有不想在侧边栏海量的文件中查找，则可以直接通过 `command` + `p` 调出输入框，输入文件名即可查找和跳转。而切换最近打开的两个文件则是由 mac 通用的快捷键 `ctrl` + `tab` 可以达到；这个快捷键在 chrome 、warp 等可打开多窗的软件也是同样的效果。

## 查找命令

在日常中，尤其最近学习 vim，我们常常要配快捷键或查找快捷键，用鼠标点点点肯定不符合键盘侠的调性；我们可以通过 `command` + `shift` + `p` 打开命令搜索框（此时输入框带 `>` 前缀），就可以查找 vscode 的命令了；比如我们要找关于 git 的命令，则可以输入 git 查看相关命令(关于 git 的命令确实可以提前去了解一下，因为过两天的训练就有关它)。

:::tip command + p 妙用
输入 `command` + `p` 后会在最上方弹出输入框，分别输入 `@` 、`#`、`>` 等符号，即可达到上面提到的功能；本质上是一样的。
:::