V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yazoox
V2EX  ›  程序员

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

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

    假定,现在有一个需求,公司的产品将只支持 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
    jiangwei2222
        5
    jiangwei2222  
       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
    oneisall8955
        14
    oneisall8955  
       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   ·   实用小工具   ·   939 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:28 · PVG 06:28 · LAX 14:28 · JFK 17:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.