【问题标题】:How do you search through your own libraries of source code?您如何搜索自己的源代码库?
【发布时间】:2013-03-03 01:16:04
【问题描述】:

我以 perl、html、css、php、javascript、autohotkey 脚本等多种文件格式编写/修改代码。

我经常在我的个人源代码库中搜索语法或复杂逻辑示例,以便在新代码中重用。或者,我将在目录树中搜索对特定字符串的代码引用(例如,在 perl、php、html 和 javascript 中对特定 css 样式的所有引用)。有时我什至会搜索像 =~ 这样的神秘字符串,因为我正在我的一个 perl 程序中搜索特定的正则表达式。

有时我使用 copernic 搜索现有代码,但不幸的是它只能搜索单词并自动忽略任何编程语法。 Windows 7 文件搜索似乎比 Windows XP 文件搜索差。

我的问题是……您如何搜索自己的源代码库?

【问题讨论】:

标签: language-agnostic


【解决方案1】:

我曾经使用find | xargs grep 技巧,直到找到ack。现在我经常使用它。

【讨论】:

  • 确实比grep好。对我来说唯一的问题是我有时会使用不太常用的语言,并且它不会将它们的源文件识别为应该读取的文件。不过,您可以将更多文件类型添加到它支持的类型列表中,所以还不错。
【解决方案2】:

使用 Cygwin:

$ find /path/to/lib -name \*.pm | xargs grep -l foo

一定要引用时髦的操作符,以便 shell 不理会它们,例如

$ find . | xargs grep '=~'

【讨论】:

    【解决方案3】:

    我通常在我的 IDE (nuSphere phpEd) 中使用搜索功能。它相当快,并且允许我按文件类型进行过滤。 Windows 的搜索功能毫无用处,并且不知何故在每个新版本中都会变得更糟。

    无论如何,不​​久前我问了一个关于programming-friendly search programs 的问题。也许其中一个答案会有所帮助。

    【讨论】:

    • 感谢 Pekka ...该链接非常有帮助。
    【解决方案4】:

    使用 Google 桌面对您的源文件进行索引和全文搜索。

    【讨论】:

    【解决方案5】:

    下载Cygwin 并学习使用随附的Grep。您可能可以获得 grep 的本机版本,但 Cygwin 有很多有用的东西,所以我只安装所有可用的包。

    【讨论】:

      【解决方案6】:

      OSX 有一个叫做 SpotLight 的东西和一个叫做 mdfind 的命令界面。如果您在 Mac 上,这些是您可以拥有的最佳本地搜索工具。

      【讨论】:

      • +1 for Spotlight - 我在 Mac 上编写的代码价值超过 25 年,我可以使用 Spotlight 立即搜索这些代码
      【解决方案7】:

      我打开我相信所需代码的项目并使用我的编辑器的“在项目中查找”选项。

      【讨论】:

        【解决方案8】:

        当我必须进行这种搜索时(即我想找到代码的确切部分),我使用“搜索目录”或“通过正则表达式搜索目录” " Eclipse PDT (我正在使用的 IDE)的功能,或者最终在命令行上使用 grep

        (对于那些使用 Windows 和/或不喜欢 CLI 的人,有一些图形工具类似于 grep -- 我见过一些同事使用它们)

        【讨论】:

          【解决方案9】:

          具有一致的命名方案。它是 memset() 还是 setmem()? InitializeUart() 或 UartInitialize() 或 UARTInitialize() 或 UARTInit()?

          【讨论】:

            【解决方案10】:

            在 Windows 环境中,我使用 Examine32。这是一个非常方便的通用字符串搜索器(这是一个有效的短语吗?:-))。

            【讨论】:

              【解决方案11】:

              TotalCommander 的搜索功能

              【讨论】:

                【解决方案12】:

                我通常知道我要做一些有点挑剔的事情,所以我在该部分附近发表评论。评论中应该总是有足够的关键字让我找到我想要的。

                那么这只是一些关于 find/grep 组合的 arseabout 的案例。

                【讨论】:

                  【解决方案13】:

                  由于我一天中的大部分时间都在疯狂地在 Emacs 中输入随机代码,但希望其中一个能做一些有用的事情,所以我经常使用 emacs find-dired 命令:

                  • Meta-x find-dired
                  • 输入我认为我会找到有趣代码的目录路径
                  • 当它要求我查找参数时,输入(例如):-name '*.rb'
                  • 当它显示匹配文件列表时,%m. 将它们全部选中(对 Emacs 明显的键映射来说是的)
                  • 然后meta-A 并输入搜索字符串。
                  • Meta-,(你还有另一个明显的键映射)去下一场比赛。

                  如果这不是一个用 20 美元的工具解决 10 美分问题的典型例子,我不知道是什么。

                  【讨论】:

                    【解决方案14】:

                    对于 C 代码,我使用 BSD 编码风格,它指出应该这样定义名为 foo 的函数:

                    字符 * 富(int x) { ... }

                    使用这种样式,函数定义是源代码中函数名称可能出现在行首的唯一位置。那么只需要使用grep即可:

                    grep '^foo' **/*.c

                    这个技巧过滤掉函数的用法,专注于定义

                    **/*.c 产生太多文件名(对于非常大的源代码树),则使用find

                    find src -name \*.c -exec grep '^foo' '{}' +

                    注意这里+-exec 的使用:这取代了xargs 的使用。

                    【讨论】:

                      【解决方案15】:

                      Pekka 提供的链接为我提供了迄今为止最好的答案。

                      Powergrep 是最接近我所寻找的解决方案。 它并不完美,但对于 Windows GUI 解决方案......我喜欢它。

                      【讨论】:

                        【解决方案16】:

                        SD Source Code Search Engine。这将源代码分解为与每种语言的元素(关键字、标识符、字符串、常量、数字、运算符)相对应的片段。您可以制定仅限于一种(代码)文件类型、一组特定文件、与所有文件匹配 foo 的标识符的搜索,setc。

                        搜索引擎对代码进行预索引,以比 grep 更快地搜索数千个文件,它在一个 GUI 窗口中显示您的命中,而在另一个 GUI 窗口中显示所选命中的完整源代码。您可以在源代码上启动编辑器。

                        【讨论】:

                          猜你喜欢
                          • 2019-10-24
                          • 1970-01-01
                          • 2012-05-20
                          • 1970-01-01
                          • 2011-10-26
                          • 1970-01-01
                          • 2016-06-12
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多