请教一下在已有代码库中快速搜索代码的技巧。比如,使用 rg 这种工具。有没相关主题文章? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yazoox
V2EX    程序员

请教一下在已有代码库中快速搜索代码的技巧。比如,使用 rg 这种工具。有没相关主题文章?

  •  
  •   yazoox 2021-03-04 08:22:47 +08:00 2929 次点击
    这是一个创建于 1688 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假定,现在有一个需求,公司的产品将只支持 chrome 浏览器 88 以上的版本,让我去改代码。 需求很简单吧,只要找到位置,改一下版本验证。可是,当初写代码的人走了,其他人都不知道在哪里。

    那这个时候就要去搜索代码了。

    比如,我现在用 rg 工具( vim 下,leaderF 自带的,其他相关的支持正则表达式的工具应该类似),怎么搜索呢?

    直接“chrome version” 会把两个单词看成一体的,而不是“或”的关系。

    其实,我知道这个的本质上就是正则表达式的书写。 以前也专门花时间去学习过相关的内容。 但是这玩意儿好像用的次数很少,等到用的时候以前学的又都忘光了。

    所以有没有那种 cheatsheets,或者,把常用的搜索源代码的一些正则表达式总结一下。

    23 条回复    2023-05-30 08:37:04 +08:00
    superrichman
        1
    superrichman  
       2021-03-04 08:33:36 +08:00 via iPhone
    ctrlsf.vim
    cslive
        2
    cslive  
       2021-03-04 08:43:14 +08:00
    JetBrains 全家桶双击 shift
    hengstchon
        3
    hengstchon  
       2021-03-04 08:48:38 +08:00 via Android
    chrome.*?version|version.*?chrome
    jfhy0901
        4
    jfhy0901  
       2021-03-04 08:59:00 +08:00 via Android
    全局查找,一般用 jetbrains
    AutumnVerse
        5
    AutumnVerse  
       2021-03-04 09:03:44 +08:00
    jetbrains 全家桶都行。如果需要自己造的话写脚本导入 es,然后用 es 搜索
    huang86041
        6
    huang86041  
       2021-03-04 09:15:03 +08:00
    你永远不知道别人写的变量名是什么,还不如搜这个人的修改记录.
    yazoox
        7
    yazoox  
    OP
       2021-03-04 09:25:17 +08:00
    @cslive @jfhy0901 @jiangwei2222 没看懂,这个 jetbrains 全局查找有啥特别么?
    xarthur
        8
    xarthur  
       2021-03-04 09:26:30 +08:00 via iPhone
    fzf
    xarthur
        9
    xarthur  
       2021-03-04 09:27:02 +08:00 via iPhone
    还有 ag
    aloxaf
        10
    aloxaf  
       2021-03-04 09:30:57 +08:00
    请好好学习正则表达式
    Hconk
        11
    Hconk  
       2021-03-04 09:35:08 +08:00
    这种我都是从界面的字符串搜索入手,比如弹出框不支持,那就搜弹出的字符串,找到调用的的地方 ,回溯调用关系,很快就定位到了。猜变量名不太靠谱。
    lightjiao
        12
    lightjiao  
       2021-03-04 09:38:18 +08:00
    @yazoox #7 用过的 IDE 中,Jetbrain 系列的全文字符串搜索是最快的
    lightjiao
        13
    lightjiao  
       2021-03-04 09:39:14 +08:00
    @lightjiao #12 我用过的是指代 VS 、Jetbrains 、VScode 、Sublime
    itechify
        14
    itechify  
    PRO
       2021-03-04 09:40:52 +08:00 via Android
    用 idea 打开,想怎么搜就怎么搜
    UserDMM
        15
    UserDMM  
       2021-03-04 09:53:57 +08:00
    我一般用类似于 Anytxt searcher 这种全局全文检索工具来搜索,还可以预览代码查看上下文,个人觉得很方便。
    现在对于我来说,和 Everything 一样,是必不可少的工具了。
    推荐给你试试
    YoRolling
        16
    YoRolling  
       2021-03-04 10:02:09 +08:00
    当然是 tldr 啊
    renmu123
        17
    renmu123  
       2021-03-04 10:12:22 +08:00 via Android
    你重新写一个把他那个覆盖得了
    CEBBCAT
        18
    CEBBCAT  
       2021-03-04 10:28:31 +08:00
    在这种问题上我不太相信正则或者说"chrome.*?version"这样的匹配模式能帮助你找到相关代码,从业务入手才是关键,

    比如楼上 @Hconk 说的从文案入手,或者我建议从业务逻辑入手,去找那些程序入口处的代码,抑或者如果知道怎么触发之前的旧逻辑,那就触发一次看看日志是哪里输出的
    tusj
        19
    tusj  
       2021-03-04 10:33:30 +08:00
    “需求很简单吧,只要找到位置,改一下版本验证”
    rrfeng
        20
    rrfeng  
       2021-03-04 10:39:39 +08:00
    git grep 不行吗?
    yazoox
        21
    yazoox  
    OP
       2021-03-04 15:08:57 +08:00
    @tusj 兄弟,我明白你的意思。很多时候,找到代码在哪里,可能都不止一天。我只是举个例子。我就是想知道搜索代码的常用 regex
    tusj
        22
    tusj  
       2021-03-04 16:46:58 +08:00
    @yazoox 其实是我看到这句,突然有种一言难尽的感觉。
    1 可能以前的代码里就没有判断版本的地方,所以怎么搜都搜不到。
    2 这样简单地一刀切方案通常都是坑,大概率过两几天发现大多用户访问有问题,又得改回来。

    最后就是,我一般不会一次写很复杂的正则去搜,先:grep -iR version ./ 整个目录树递归搜一把,先观察结果有多少。如果量少,几十行,就一个个看。如果量大,几百行,再接管道补充条件:grep -iR version ./ | grep -i chrome
    bigtang
        23
    bigtang  
       2023-05-30 08:37:04 +08:00
    chromium 的源代码 tanglib.com 可以全文检索, ”chrome version“ 不连在一起搜索可以搜索 chrome "version"
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1013 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:46 PVG 02:46 LAX 11:46 JFK 14:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86