Как я могу найти слово во всем проекте / папке рекурсивно? - PullRequest
50 голосов
/ 31 октября 2011

Предположим, я ищу класс JFactory внутри папки и ее подкаталогов.

Как мне подать этот файл, который содержит class JFactory?

Я не хочу заменять это слово, но мне нужно найти тот файл, который содержит class JFactory.

Ответы [ 6 ]

74 голосов
/ 31 октября 2011
:vimgrep /JFactory/ **/*.java

Вы можете заменить шаблон /JFactory/ на /\<JFactory\>/, если хотите получить полное совпадение слов.:vim является сокращением для :vimgrep.

Если JFactory или \<JFactory\> является вашим текущим шаблоном поиска (например, вы нажали * в одном случае), вы можете использовать пустой шаблон поиска::vimgrep // **/*.java, вместо этого будет использоваться последний шаблон поиска.Handy!

Предупреждение: :vimgrep будет запускать автокоманды, если они включены.Это может замедлить поиск.Если вы не хотите этого, вы можете сделать:

:noautocmd vimgrep /\<JFactory\>/ **/*.java

, что будет быстрее.Но: он не будет вызывать подсветку синтаксиса или открывать gz файлы без распаковки и т. Д.

Обратите внимание, что если вы хотите, чтобы внешняя программа выполняла поиск шаблона, вы можете сделать что-то вроде следующего:

:set grepprg=ack
:grep --java JFactory

Ack - это написанная на Perl альтернатива grep.Обратите внимание, что тогда вам придется переключиться на регулярные выражения Perl.

После того, как вернулась выбранная вами команда, вы можете просмотреть результаты поиска с помощью этих команд, описанных в документации Vim на :help quickfix.Поиск :cfirst, :cnext, :cprevious, :cnfile и т. Д.

2014 обновление: теперь есть новые способы сделать это с помощью the_silver_searcher или the_platinum_searcher и ag.vim илиunite.vim плагинов.

16 голосов
/ 07 октября 2013

В корневой папке проекта выполните следующее:

grep -H -r 'what_you_search' * | less

Вы получите список папок и соответствующих строк с этой строкой.

7 голосов
/ 13 мая 2017

Серебряный Искатель (https://github.com/ggreer/the_silver_searcher) очень рекомендуется, очень быстро!

установка

sudo pacman -S the_silver_searcher  // arch linux 
sudo apt install silversearcher-ag  // ubuntu

использование

$ ag keywords

интегрируется с vim

rking / ag.vim (https://github.com/rking/ag.vim)

после установки

:Ag keywords
2 голосов
/ 31 октября 2011

Взгляните на ctags и cscope , которые позволяют перейти к определениям классов и функций и найти, где эти функции / классы используются.

1 голос
/ 31 октября 2011

Этот скрипт может помочь: Filesearch .

0 голосов
/ 02 февраля 2017

Откройте окно командной строки:

Esc - чтобы убедиться, что вы находитесь в обычном режиме

введите q, введите:

должна открыться командная строка (например,файл tmp для написания команды, по которой вы можете перемещаться так же, как при обычной навигации по любому файлу vim ...

введите i для входа в режим вставки

в этом примере будет выполняться поиск строки to_srch рекурсивно нижетекущий каталог для всех типов файлов типа ' .js' и ' .java', но пропущены все пути к файлам, содержащие строку node_modules

:g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'`

Теперь, когда вы: copen, вы можете перемещатьсяс помощью клавиш со стрелками в результатах поиска ...

вы также можете установить их в .vimrc

    " how-to search recursively under the current dir for the files of type js and java but omit the
    " node_modules file paths
    ":g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'`
    " reminder open the quick fix window by :copen 20
    " reminder close the quick fix window by :ccl

, вы можете опустить первое: q / to_srch / я использую его, чтобы выделитьрезультаты поиска автоматически, так как я указал "set hlsearch" в моем ~ / .vimrc

Любая подсказка, как автоматически включить результаты srch из vimgrep или в vimrc, будет высоко оценена ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...