比如查找 src 目录下所有的.sql 后缀文件中是否“CREATE TABLE”这一搜索关键词,听起来是一个很常见的需求
1. 通常我是在想要搜索的目录上选择 [在文件夹中查找 / ⌥ + ⇧ + F ] ,但此时 vs code 会自动将该文件夹路径回填到 [包含的文件] 下面的输入框中,没法填写过滤文件类型了 (输入空格+文件类型也不行);
2. 直接输入搜索词,然后 [包含的文件] 输入框中输入“.sql”,此时倒是可以过滤文件类型,但是搜索是针对整个编辑器的 workspace ,速度和效率又不太理想,还要过滤一大堆不相关结果
请问是否有什么设置或者插件可以满足?
1
ttvv123 2023-11-01 08:38:52 +08:00
为什么一定要 vs code ? everything 之类的工具不挺好?
|
2
0toz 2023-11-01 08:41:25 +08:00
在包含的文件输入框内输入:./src/*.sql
这样应该可以把 |
3
A3 2023-11-01 08:41:38 +08:00 via Android
1 后面加上**/*.sql 试试
|
4
dream4ever 2023-11-01 08:43:05 +08:00
用关键词 `vscode find in folder specific file extension` Google 一下就能找到结果。
files to include 那里填 `./target/folder/**/*.sql` 就可以。 |
5
daydreamcafe 2023-11-01 08:43:15 +08:00
搜索面板,点击那三个点,展开 search details ,在 file to include 输入框上输入想要过滤的文件 *.sql,*.java 之类的,多个文件就用 csv 的格式
|
6
gangsta OP @dream4ever 我前几天 Google 到这个结果了但没看明白,请问`./target/folder/**/*.sql` 这个路径里的**个数是和实际的文件路径一致的吗?
考虑到文件目录路径通常会很长,比如“/User/admin/aaa/bbb/ccc/ddd/eee/fff” @daydreamcafe 请看我的描述,需要自定路径的 |
7
296727 2023-11-01 09:05:23 +08:00
|
8
296727 2023-11-01 09:05:54 +08:00
为什么我的 imgur 永远不显示图片呢
|
10
daydreamcafe 2023-11-01 09:10:19 +08:00 1
@gangsta 比如你想要搜索的文件夹目录是 `src/amodule/bmodule` ,你想要在这个目录下搜索所有的 sql 文件,你已经知道怎么快捷让 vscode 帮你回填这个目录到搜索面板,那就是点击目录选择`find in folder shift+option+F` ,此时会回填这个 `src/amodule/bmodule` 到 `files to include` 这个输入框,你想要过滤特定的文件类型,那就补充一些内容到后面
在你这个场景就是 `src/amoeule/bmodule/**/*.sql` 这里的两个星号 ** 就是匹配任意层目录 |
11
shuqin2333 2023-11-01 09:13:33 +08:00
@296727 #8 我也一样,机场节点不行。换个节点偶尔能出来
|
12
lysS 2023-11-01 09:20:49 +08:00
不就是 shift f ,再把过滤条件填上不就行了?
|
13
yohirowang 2023-11-01 09:37:17 +08:00
这种需求场合我一般用 grepwin
|
15
darksword21 2023-11-01 09:50:18 +08:00
呃,我用 emacs ,rg 或者 urgrep 应该都可以满足,可以根据 .gitignore 过滤或者动态设置
|
16
gam2046 2023-11-01 09:51:30 +08:00
直接左侧的搜索框就行,当然啦,有的时候我是命令行一把梭,就是顺手一敲会比点 UI 更快
find . -type f -name "*-.sql" | xargs grep --color "CREATE TABLE" |
17
dinghmcn 2023-11-01 09:56:15 +08:00
其实,fd 和 rg 都支持 Windows
|
18
junjia9917364 2023-11-01 09:57:43 +08:00
VScode 有过滤搜索,搜索框旁边三个点点开,有搜索文件后缀限制,
整个文件夹拖入 VScode ,筛选搜索就好 |
19
tool2d 2023-11-01 09:59:54 +08:00
OP 需求很类似基于日志的动态二次排查。
不仅仅是 CREATE TABLE 这一个条件,还需要交互式二次筛选,三次筛选。 类似于 less 命令。 |
20
gangsta OP @tool2d 我已经把问题尽量简化了,就是指定目录下“只搜索某一种(或几种)指定的文件类型内是否包含”,算是很常见的搜索场景。很多年前写 Java 用 Eclipse ,它的某一些版本中就有类似的功能:输入关键词,指定路径,勾选 file type 。
当然实际的应用场景因人而异,有可能要复杂的多(比如你提到的日志排查,多目录聚合到一个 workspace 下去多条件搜索)。此时可能已无法通过编辑器的 UI 操作去满足了。 上面好几个人的回复都忽略了“指定目录”这个条件,可能是开发时的习惯:只添加较少的几个目录到 workspace ,此时直接在 include 中输入指定后缀名(一个或多个)确实可以实现,但是当项目下的目录和文件够多时就不适合了。 我个人是家中电脑和笔记本的代码采用完全相同的路径,所以干脆连 vscode.code-workspace 也加到 git 中去管理了,相当于有一个很大的 workspace 。 |
21
CEBBCAT 2023-11-01 11:16:01 +08:00
使用这条命令:
grep -Rn ./src -e 'CREATE TABLE' '--include=*.sql' 搜索方式:Google “shell find file contain text” 会把你带到 https://stackoverflow.com/a/16957078 --- BTW, IntellIJ 的 Find Tool 也可以完成这个工作 |
23
cchaan 2023-11-01 11:30:10 +08:00
windows 下我的 EmEditor ,文件夹空白右键“用 EmEditor 在文件中查找”,是用的最顺手的
|
25
runze 2023-11-01 13:26:56 +08:00 1
https://code.visualstudio.com/docs/editor/glob-patterns
VS Code supports the following glob syntax: / to separate path segments * to match zero or more characters in a path segment ? to match on one character in a path segment ** to match any number of path segments, including none {} to group conditions (for example {**/*.html,**/*.txt} matches all HTML and text files) [] to declare a range of characters to match (example.[0-9] to match on example.0, example.1, …) [!...] to negate a range of characters to match (example.[!0-9] to match on example.a, example.b, but not example.0) |