Как искать весь исходный код в Vim?

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

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

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

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

Ответ 1

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

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

Существует краткое описание grep text с помощью SourceCodeObedience.

Ответ 2

Я использую для этого 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

Ответ 3

Вы можете проверить :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

Ответ 4

Вы можете использовать :vimgrep i.e.:

  :vimgrep /pattern/ **/*.py

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

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

Ответ 5

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

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

Ответ 7

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

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