V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gangsta
V2EX  ›  Visual Studio Code

请问 VS Code 如何查找指定目录下,指定类型文件中是否包含关键字?

  •  
  •   gangsta · 2023-11-01 08:35:29 +08:00 · 2441 次点击
    这是一个创建于 384 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如查找 src 目录下所有的.sql 后缀文件中是否“CREATE TABLE”这一搜索关键词,听起来是一个很常见的需求
    
    1. 通常我是在想要搜索的目录上选择 [在文件夹中查找 / ⌥ + ⇧ + F ] ,但此时 vs code 会自动将该文件夹路径回填到 [包含的文件] 下面的输入框中,没法填写过滤文件类型了 (输入空格+文件类型也不行);
    
    2. 直接输入搜索词,然后 [包含的文件] 输入框中输入“.sql”,此时倒是可以过滤文件类型,但是搜索是针对整个编辑器的 workspace ,速度和效率又不太理想,还要过滤一大堆不相关结果
    

    请问是否有什么设置或者插件可以满足?

    25 条回复    2023-11-01 13:26:56 +08:00
    ttvv123
        1
    ttvv123  
       2023-11-01 08:38:52 +08:00
    为什么一定要 vs code ? everything 之类的工具不挺好?
    0toz
        2
    0toz  
       2023-11-01 08:41:25 +08:00
    在包含的文件输入框内输入:./src/*.sql
    这样应该可以把
    A3
        3
    A3  
       2023-11-01 08:41:38 +08:00 via Android
    1 后面加上**/*.sql 试试
    dream4ever
        4
    dream4ever  
       2023-11-01 08:43:05 +08:00
    用关键词 `vscode find in folder specific file extension` Google 一下就能找到结果。

    files to include 那里填 `./target/folder/**/*.sql` 就可以。
    daydreamcafe
        5
    daydreamcafe  
       2023-11-01 08:43:15 +08:00
    搜索面板,点击那三个点,展开 search details ,在 file to include 输入框上输入想要过滤的文件 *.sql,*.java 之类的,多个文件就用 csv 的格式
    gangsta
        6
    gangsta  
    OP
       2023-11-01 08:59:50 +08:00
    @dream4ever 我前几天 Google 到这个结果了但没看明白,请问`./target/folder/**/*.sql` 这个路径里的**个数是和实际的文件路径一致的吗?
    考虑到文件目录路径通常会很长,比如“/User/admin/aaa/bbb/ccc/ddd/eee/fff”


    @daydreamcafe 请看我的描述,需要自定路径的
    296727
        7
    296727  
       2023-11-01 09:05:23 +08:00
    296727
        8
    296727  
       2023-11-01 09:05:54 +08:00
    为什么我的 imgur 永远不显示图片呢
    waiaan
        9
    waiaan  
       2023-11-01 09:08:51 +08:00
    @ttvv123
    everything 可以搜索文件内容?怎么配置?
    daydreamcafe
        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`
    这里的两个星号 ** 就是匹配任意层目录
    shuqin2333
        11
    shuqin2333  
       2023-11-01 09:13:33 +08:00
    @296727 #8 我也一样,机场节点不行。换个节点偶尔能出来
    lysS
        12
    lysS  
       2023-11-01 09:20:49 +08:00
    不就是 shift f ,再把过滤条件填上不就行了?
    yohirowang
        13
    yohirowang  
       2023-11-01 09:37:17 +08:00
    这种需求场合我一般用 grepwin
    tool2d
        14
    tool2d  
       2023-11-01 09:46:38 +08:00
    @296727 路径要包含.jpg 结尾才行。
    darksword21
        15
    darksword21  
       2023-11-01 09:50:18 +08:00
    呃,我用 emacs ,rg 或者 urgrep 应该都可以满足,可以根据 .gitignore 过滤或者动态设置
    gam2046
        16
    gam2046  
       2023-11-01 09:51:30 +08:00
    直接左侧的搜索框就行,当然啦,有的时候我是命令行一把梭,就是顺手一敲会比点 UI 更快

    find . -type f -name "*-.sql" | xargs grep --color "CREATE TABLE"
    dinghmcn
        17
    dinghmcn  
       2023-11-01 09:56:15 +08:00
    其实,fd 和 rg 都支持 Windows
    junjia9917364
        18
    junjia9917364  
       2023-11-01 09:57:43 +08:00
    VScode 有过滤搜索,搜索框旁边三个点点开,有搜索文件后缀限制,
    整个文件夹拖入 VScode ,筛选搜索就好
    tool2d
        19
    tool2d  
       2023-11-01 09:59:54 +08:00
    OP 需求很类似基于日志的动态二次排查。

    不仅仅是 CREATE TABLE 这一个条件,还需要交互式二次筛选,三次筛选。

    类似于 less 命令。
    gangsta
        20
    gangsta  
    OP
       2023-11-01 10:23:52 +08:00
    @tool2d 我已经把问题尽量简化了,就是指定目录下“只搜索某一种(或几种)指定的文件类型内是否包含”,算是很常见的搜索场景。很多年前写 Java 用 Eclipse ,它的某一些版本中就有类似的功能:输入关键词,指定路径,勾选 file type 。
    当然实际的应用场景因人而异,有可能要复杂的多(比如你提到的日志排查,多目录聚合到一个 workspace 下去多条件搜索)。此时可能已无法通过编辑器的 UI 操作去满足了。

    上面好几个人的回复都忽略了“指定目录”这个条件,可能是开发时的习惯:只添加较少的几个目录到 workspace ,此时直接在 include 中输入指定后缀名(一个或多个)确实可以实现,但是当项目下的目录和文件够多时就不适合了。
    我个人是家中电脑和笔记本的代码采用完全相同的路径,所以干脆连 vscode.code-workspace 也加到 git 中去管理了,相当于有一个很大的 workspace 。
    CEBBCAT
        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 也可以完成这个工作
    liuhan907
        22
    liuhan907  
       2023-11-01 11:26:19 +08:00
    @gangsta include 是可以包含目录的
    cchaan
        23
    cchaan  
       2023-11-01 11:30:10 +08:00
    windows 下我的 EmEditor ,文件夹空白右键“用 EmEditor 在文件中查找”,是用的最顺手的
    GreatAuk
        24
    GreatAuk  
       2023-11-01 12:17:57 +08:00
    @gangsta 了解一下 glob
    runze
        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)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5558 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.