2010-01-26 180 views
19

我写/修改多种文件格式的代码如Perl,HTML,CSS,PHP,JavaScript的,AutoHotkey的脚本,...等如何通过自己的源代码库进行搜索?

我经常搜索我个人的源代码库的语法或复杂的逻辑的例子用于新代码中的重用。或者,我将通过目录树搜索特定字符串的代码引用(例如,所有对perl,php,html和javascript中特定css风格的引用)。有时候我甚至会搜索一些神秘的字符串,例如=〜,因为我在我的一个perl程序中搜索特定的正则表达式。

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

我的问题是...你如何通过你自己的源代码库进行搜索?

+3

投票类型问题应该是CW。另外,这与SU材料太接近了。 – 2010-01-26 20:17:33

+0

不完全重复,但密切相关:http://stackoverflow.com/questions/4101/where-do-you-store-your-code-snippets http://stackoverflow.com/questions/78756/what-do - 你使用保持笔记作为一个开发人员关闭http://stackoverflow.com/questions/33994/what-c​​ode-snippet-editor-do-you-use http://stackoverflow.com/questions/212634/best-application-for-storage-code-snippets – dmckee 2010-01-28 17:00:19

回答

5

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

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

+0

感谢Pekka ...该链接非常有帮助。 – panofish 2010-01-28 17:15:53

3

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

+0

Google桌面已停用。 http://googleblog.blogspot.com/2011/09/fall-spring-clean.html – 2013-03-02 17:17:27

6

使用Cygwin:

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

务必使壳留给他们单独,如引用时髦的运营商

$ find . | xargs grep '=~' 
0

当我不得不这样做的搜索(即我想找到的代码的精确部分),我eiter使用“搜索到的目录”,或“被搜索到的目录正则表达式“的Eclipse PDT (我正在使用的IDE)的功能性,或者最终在命令行上使用grep

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

3

下载Cygwin和学会使用它附带的Grep。您可能能够获得grep的本地版本,但Cygwin有很多有用的东西,所以我只安装所有可用的软件包。

1

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

1

OSX有一些名为SpotLight的命令和一个名为mdfind的命令接口。如果你使用的是Mac,那么这些都是最好的本地搜索工具。

+0

+1为Spotlight - 我有25年以上的代码,我写在我的Mac上,我可以使用Spotlight瞬间搜索 – 2010-01-26 21:16:48

13

我曾经使用find | xargs grep技巧,直到找到ack。现在我用了很多。

+0

我会检查到这一个。 – panofish 2010-01-26 20:21:29

+3

它确实比grep好。对我来说,唯一的问题是我有时使用较不常见的语言,并且不会将它们的源文件识别为它应该读取的文件。不过,您可以将更多的文件类型添加到它支持的类型列表中,所以它不是太糟糕。 – pib 2010-01-28 17:17:58

0

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

0

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

0

对于C代码,我使用了BSD编码风格,其中指出,一个名为foo函数应如此定义:

 
char * 
foo(int x) 
{ 
    ... 
} 

利用这种样式,函数定义在源代码中的唯一位置函数名称可能出现在一行的开头。然后,它只是使用grep的问题:

 
grep '^foo' **/*.c 

这招过滤掉用途的功能,把注意力集中在定义

**/*.c产生过多的文件名(非常大的源代码树),然后find将用于:这里

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

注意使用+-exec:此取代使用xargs

0

我大致知道我即将做的东西有点挑剔,所以我捶附近的部分评论。评论应该总是有足够的关键字,以便我找到我所追求的内容。

然后它只是一些arseabout find/grep组合的例子。

0

因为我花了最多的一天疯狂地打字的码随机位到Emacs徒然希望其中一人会做一些有用的东西,我经常使用Emacs 找到-dired命令:

  • Meta-x find-dired
  • 输入目录下,我想我会找到有趣的代码
  • 当它问我要找到参数,输入(例如)路径:-name '*.rb'
  • 瓦它带来了匹配文件列表,%m.选择它们全部(Yma for Emacs的明显的键映射)
  • Then meta-A然后输入搜索字符串。
  • Meta-,(还有另外一个明显的关键映射)可以进入下一场比赛。

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

0

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

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

0

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

搜索引擎预先指标的代码,以使搜索在成千上万的文件远远超过grep的速度更快,这表明你在一个GUI窗口命中,而在另一个选定打击的完整源代码。您可以在源代码上启动编辑器。