Предположим, что я ищу класс JFactory
внутри папки и ее подкаталогов.
Как я могу записать файл, содержащий class JFactory
?
Я не хочу заменять это слово, но мне нужно найти этот файл, содержащий class JFactory
.
Предположим, что я ищу класс JFactory
внутри папки и ее подкаталогов.
Как я могу записать файл, содержащий class JFactory
?
Я не хочу заменять это слово, но мне нужно найти этот файл, содержащий class JFactory
.
:vimgrep /JFactory/ **/*.java
Вы можете заменить шаблон /JFactory/
на /\<JFactory\>/
, если вы хотите совпадение полного слова. :vim
является сокращением для :vimgrep
.
Если JFactory
или \<JFactory\>
- ваш текущий шаблон поиска (например, вы нажали *
в одном случае), вы можете использовать пустой шаблон поиска: :vimgrep // **/*.java
, вместо этого он будет использовать последний шаблон поиска. Handy!
Предупреждение: :vimgrep
будет запускать autocmds, если включено. Это может замедлить поиск. Если вы не хотите, чтобы это можно было сделать:
:noautocmd vimgrep /\<JFactory\>/ **/*.java
который будет быстрее. Но: он не будет вызывать подсветку синтаксиса или открывать файлы gz
ungzipped и т.д.
Обратите внимание: если вы хотите, чтобы внешняя программа grep вашего шаблона, вы можете сделать что-то вроде следующего:
: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
.
В корневой папке проекта выполните следующие действия:
grep -H -r 'what_you_search' * | less
Вы получите список папок и соответствующих строк с этой строкой.
Серебряный искатель (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
Посмотрите ctags и cscope которые позволяют вам перейти к определениям классов и функций и найти, где эти функции/классы используются.
Этот script может помочь: Filesearch.
Откройте окно командной строки:
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/*'`
Теперь вы нажимаете: вы можете перемещаться с помощью клавиш со стрелками через результаты sarch...
вы также можете установить их в .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, будут высоко оценены...