2009-03-29 8 views
35

Wenn Vim verwendet wird und ein Verzeichnis mit Code (z. B. ~/trunk /) mit einer Anzahl von Unterverzeichnissen gefüllt wird, gibt es eine Möglichkeit, nach Text-/Regex-Instanzen im gesamten Quellcode zu suchen.Wie suchen Sie den gesamten Quellcode in Vim?

Im Moment benutze ich:

:lcd ~/trunk 
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py 

(Offensichtlich bin Begrenzung mir die Python-Dateien, die eine andere Frage ist, aber es ist bemerkenswert, dass im Idealfall würde ich mit der Suche nach Dateien begrenzen möge spezifische Erweiterungen)

Antwort

36
:vimgrep "pattern" ~/trunk/**/*.py 
:copen 20 

Wenn Sie ganz ein großes Projekt habe ich Ihnen empfehlen würde cscope und vim plugins zu verwenden. Hier ist eine für große Projekte entworfen: SourceCodeObedience

Es gibt eine kurze Beschreibung, wie grep text mit SourceCodeObedience.

+0

Welcher? vimgrep oder .sco? –

+0

vimgrep. Ich habe die Zeit nicht in SCO investiert, um nützlich zu werden. –

+0

Dies ist der "richtige Weg", dies zu tun, denn dies ist der "vim way". –

2

Sie :vimgrep also nutzen könnten.

 :vimgrep /pattern/ **/*.py 

prüfen diesen Vim Tipp:

auch einen Blick auf grep.vim geben, es ist ein Plugin, das den grep, fgrep, egrep integriert und agrep Tools mit Vim und ermöglicht es Ihnen, nach einem Muster in einer oder mehreren Dateien und zur Suche springen ihnen ...

6

Ich benutze Grep direkt dafür.

grep -IirlZ "pattern" .|xargs -0 vim 

-I: ignore binary 
-i: ignore case 
-r: recursive 
-l: print file name only 
-Z: print \0 after each file name 
+0

Funktioniert nicht auf meinem Windows gvim. – kroiz

5

Sie möchten :vimgrep und :grep in der Vim-Dokumentation überprüfen. :vimgrep verwendet die eigene Mustersuchfunktion von vim und liest alle Dateien in vim-Puffer. :grep verweist standardmäßig auf eine externe grep Utility auf Ihrem System, aber Sie können das Verhalten ändern, indem Sie die Option grepprg einstellen. Hier ist ein Link auf die Online-Dokumentation:

http://vimdoc.sourceforge.net/htmldoc/quickfix.html#grep

Es gibt weitere Informationen über das und auch einige andere Optionen in der Spitze auf „Suchen in Dateien innerhalb Vim“ an dem Vim Tipps Wiki:

http://vim.wikia.com/wiki/Find_in_files_within_Vim

0

Sie können einen Quellcodeindex mithilfe von ctags erstellen, und dann kann VIM use this verwenden, um nahtlos durch Ihre Codebasis zu navigieren. Es ist Quellcode bewusst, dass Sie direkt zu Methodendeklarationen etc. springen können.

Sie müssen die Ctags-Dateien immer wieder neu generieren, aber Sie können dies als Teil Ihres Make-Prozesses tun. Es sollte ziemlich schnell sein, wenn Ihre Codebasis nicht groß ist.

+0

Wie hilft das, Symbolreferenz zu finden? –

+0

Ctags indexieren Ihren Quellcode (in den meisten Sprachen). VIM kann über den Index ctags navigieren, so dass Sie sich über jedes Symbol positionieren und direkt zur Definition springen können. Strg +], denke ich. –

3

Setzen Sie grepprg auf Ack, verwenden Sie dann :grep, um mit Ack zu suchen.

Oder verwenden Sie Ctags.

Verwandte Themen