V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gangsta

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

  •  
  •   gangsta · Nov 1, 2023 · 4048 views
    This topic created in 915 days ago, the information mentioned may be changed or developed.
    比如查找 src 目录下所有的.sql 后缀文件中是否“CREATE TABLE”这一搜索关键词,听起来是一个很常见的需求
    
    1. 通常我是在想要搜索的目录上选择 [在文件夹中查找 / ⌥ + ⇧ + F ] ,但此时 vs code 会自动将该文件夹路径回填到 [包含的文件] 下面的输入框中,没法填写过滤文件类型了 (输入空格+文件类型也不行);
    
    2. 直接输入搜索词,然后 [包含的文件] 输入框中输入“.sql”,此时倒是可以过滤文件类型,但是搜索是针对整个编辑器的 workspace ,速度和效率又不太理想,还要过滤一大堆不相关结果
    

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

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

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


    @daydreamcafe 请看我的描述,需要自定路径的
    296727
        7
    296727  
       Nov 1, 2023
    296727
        8
    296727  
       Nov 1, 2023
    为什么我的 imgur 永远不显示图片呢
    waiaan
        9
    waiaan  
       Nov 1, 2023
    @ttvv123
    everything 可以搜索文件内容?怎么配置?
    tY3N62hFz90E74bK
        10
    tY3N62hFz90E74bK  
       Nov 1, 2023   ❤️ 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  
       Nov 1, 2023
    @296727 #8 我也一样,机场节点不行。换个节点偶尔能出来
    lysS
        12
    lysS  
       Nov 1, 2023
    不就是 shift f ,再把过滤条件填上不就行了?
    yohirowang
        13
    yohirowang  
       Nov 1, 2023
    这种需求场合我一般用 grepwin
    tool2d
        14
    tool2d  
       Nov 1, 2023
    @296727 路径要包含.jpg 结尾才行。
    darksword21
        15
    darksword21  
    PRO
       Nov 1, 2023
    呃,我用 emacs ,rg 或者 urgrep 应该都可以满足,可以根据 .gitignore 过滤或者动态设置
    ntdll
        16
    ntdll  
       Nov 1, 2023
    直接左侧的搜索框就行,当然啦,有的时候我是命令行一把梭,就是顺手一敲会比点 UI 更快

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

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

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

    上面好几个人的回复都忽略了“指定目录”这个条件,可能是开发时的习惯:只添加较少的几个目录到 workspace ,此时直接在 include 中输入指定后缀名(一个或多个)确实可以实现,但是当项目下的目录和文件够多时就不适合了。
    我个人是家中电脑和笔记本的代码采用完全相同的路径,所以干脆连 vscode.code-workspace 也加到 git 中去管理了,相当于有一个很大的 workspace 。
    CEBBCAT
        21
    CEBBCAT  
       Nov 1, 2023
    使用这条命令:

    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  
       Nov 1, 2023
    @gangsta include 是可以包含目录的
    cchaan
        23
    cchaan  
       Nov 1, 2023
    windows 下我的 EmEditor ,文件夹空白右键“用 EmEditor 在文件中查找”,是用的最顺手的
    GreatAuk
        24
    GreatAuk  
       Nov 1, 2023
    @gangsta 了解一下 glob
    runze
        25
    runze  
       Nov 1, 2023   ❤️ 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)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   851 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 22:56 · PVG 06:56 · LAX 15:56 · JFK 18:56
    ♥ Do have faith in what you're doing.