2010-01-26 176 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窗口命中,而在另一個選定打擊的完整源代碼。您可以在源代碼上啓動編輯器。