有一种方法来搜索文本在一个目录中使用VS Code的所有文件?

也就是说,如果我在搜索中输入find this,它将搜索当前目录中的所有文件并返回匹配的文件。


当前回答

不那么明显的是,您可以使用下面的模式来递归搜索

./src/**/*.html

因此,对于大多数典型的搜索,可以将以下内容作为默认设置,以提醒存在这样的东西

./src/**/

例如,我在左-右对齐/对接内容的属性后,我不记得了,除了“开始”,所以我做了以下搜索,向我揭示了“项目-开始”

这固定了我的布局

而不是

下面是“item-sart”在模板中的位置。

其他回答

一个简单的答案是点击左边栏的放大镜

VS Code默认动作

# Command Shortcut Command ID
1. View: Show Explorer CTRL+SHIFT+E workbench.view.explorer
2. Focus current directory (Left arrow)
3. Right-click / Find in Folder... ALT+SHIFT+F filesExplorer.findInFolder

建议

默认命令太慢,即使使用键盘快捷键(需要按7次键)。

首先,我们去掉左箭头键。默认情况下,文件资源管理器。findInFolder命令要求聚焦一个文件夹。但是,它可以通过搜索文件的父文件夹完美地工作。

首选项:打开键盘快捷键(CTRL+K, CTRL+S) 搜索filesExplorer。findInFolder命令。 右键/更改表达式(CTRL+K, CTRL+E) 从When Expression中移除explorerResourceIsFolder需求。结果应该是:explorerViewletVisible && filesExplorerFocus && !inputFocus

现在,在文件夹中查找命令也适用于文件,因此快捷键组合向下一个键。下一个是ALT+SHIFT+F,这很烦人,有两个原因:

你必须记住什么时候按CTRL,什么时候按ALT,这很容易搞砸。 一些扩展使用ALT+SHIFT+F代码自动格式化-我怀疑这是你想要的副作用。

这就是为什么我建议用一些When Expression魔术来改变快捷键CTRL+SHIFT+F:

首选项:打开键盘快捷键(CTRL+K, CTRL+S) 搜索workbench.action.findInFiles,将其When Expression设置为!filesExplorerFocus 再次搜索filesExplorer。并将其键绑定更改为CTRL+SHIFT+F

结果

当文件资源管理器被聚焦时,CTRL+SHIFT+F触发“在文件夹中查找”,默认的“在文件中查找”在其他地方。 你必须按CTRL+SHIFT+F“在文件中查找”,或CTRL+SHIFT+E, CTRL+SHIFT+F“在文件夹中查找”。很容易记住。此外,后者可以通过按住CTRL+SHIFT同时按E,然后按F来优化

用户配置

{
  "key": "ctrl+shift+f",
  "command": "workbench.action.findInFiles",
  "when": "!filesExplorerFocus"
},
{
  "key": "ctrl+shift+f",
  "command": "filesExplorer.findInFolder",
  "when": "explorerViewletVisible && filesExplorerFocus && !inputFocus"
}

警告

filesExplorer。findfolder命令覆盖“要包含的文件”字段。例如,您可以有一个文件搜索模式*.c,*.cpp,*.h,*.hpp,现在它被文件夹路径覆盖。但你总是可以在字段中按↑(uprow)来循环历史记录并恢复之前的模式。

您可以执行编辑,在文件中查找(或按Ctrl+Shift+F -默认键绑定,Cmd+Shift+F在MacOS上)来搜索当前打开的文件夹。

对话框上有一个省略号,您可以在其中包括/排除文件,以及搜索框中匹配大小写/单词和使用Regex的选项。

要添加到上面,如果你想在选定的文件夹内搜索,右键单击文件夹,然后单击“在文件夹中查找”或默认键绑定:

Alt+Shift+F

如前所述,要搜索项目中的所有文件夹,单击编辑>“在文件中查找”或:

Ctrl + Shift + F

如果你想使用PowerShell搜索并打开当前目录下的所有文本文件:

foreach($file in $(dir -recurse -include *.txt))
{
    code $file
}

你也可以更具体一点,甚至改变文件类型:

foreach($file in $(dir <specificDir> -recurse -include *.<anyExtension>))
{
    code $file
}