2009-03-29 8 views
35

При использовании Vim и заданной каталогом, заполненным кодом (например, ~/trunk /), с рядом подкаталогов, существует ли способ grep/search для экземпляров текста/регулярных выражений по всему исходному коду?Как искать все исходные коды в Vim?

На данный момент я использую:

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

(Очевидно, я ограничивая это файлы Python, который является другой вопрос, но стоит отметить, что в идеале я хотел бы, чтобы ограничить область поиска файлов с специфические расширения)

ответ

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

Если у вас есть довольно большой проект, я бы порекомендовал вам использовать cscope и vim plugins. Вот один из них, предназначенный для обработки больших проектов: SourceCodeObedience

Краткое описание: grep text с использованием SourceCodeObedience.

+0

Какой? vimgrep или .sco? –

+0

vimgrep. Я не инвестировал время в ШОС, чтобы оно стало полезным. –

+0

Это «правильный путь» для этого, потому что это «vim way». –

2

Вы могли бы использовать :vimgrep то есть:.

 :vimgrep /pattern/ **/*.py 

Проверьте этот Vim Tip:

Также взглянуть на grep.vim, это плагин, который интегрирует Grep, fgrep, задать расширенное и инструменты agrep с Vim и позволяет осуществлять поиск по шаблону в одном или нескольких файлах и прыгать им ...

6

Я использую grep непосредственно для этого.

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

Не работает на моем windows gvim. – kroiz

5

Вы можете проверить :vimgrep и :grep в документации Vim. :vimgrep использует собственную функцию поиска шаблонов vim и считывает все файлы в буферы vim. :grep по умолчанию ссылается на внешний grep utlity в вашей системе, но вы можете изменить его, установив опцию grepprg. Вот ссылка на интернет-документы:

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

Там больше информации о том, что, а также некоторые другие параметры в наконечнике на «Найти в файлах в Vim» в Vim Tips Wiki:

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

0

Вы можете сгенерировать индекс исходного кода, используя ctags, а затем VIM может use this плавно перемещаться по вашей базе кода. Исходный код знает, что вы можете перейти непосредственно к объявлениям методов и т. Д.

Вам нужно регенерировать файлы ctags каждый раз так часто, но вы можете сделать это как часть своего процесса make. Это должно быть довольно быстро, если ваша база кода не является значительной.

+0

Как это помогает найти ссылку на символ? –

+0

ctags индексирует ваш исходный код (на большинстве языков). VIM имеет возможность перемещаться по индексу ctags, поэтому вы можете позиционировать себя над любым символом, а затем перейти непосредственно к определению. Ctrl +], я думаю. –

3

Установить grepprg в Ack, а затем использовать :grep для поиска с помощью Ack.

Или используйте ctags.

Смежные вопросы