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

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

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

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

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

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


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

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

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

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

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

    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  
       178 天前
    @gangsta include 是可以包含目录的
    cchaan
        23
    cchaan  
       178 天前
    windows 下我的 EmEditor ,文件夹空白右键“用 EmEditor 在文件中查找”,是用的最顺手的
    GreatAuk
        24
    GreatAuk  
       178 天前
    @gangsta 了解一下 glob
    runze
        25
    runze  
       178 天前   ❤️ 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   ·   我们的愿景   ·   实用小工具   ·   2502 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:01 · PVG 00:01 · LAX 09:01 · JFK 12:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.