2012-01-08 29 views
2

Одна вещь, которую я люблю делать время от времени, - это быстрый поиск по каталогу, в котором я работаю, и найти все ссылки на определенную строку, особенно при отладке кода от кого-то еще. Неужели VIM не может выполнить такой поиск? Есть ли альтернатива сделать это прямо с помощью простого терминала?VIM search multiple closed files

ATM (так как я все еще изучаю VIM) Я выполняю поиск в TextMate и нахожу строку таким образом.

+0

Я только что нашел этот плагин, который восходит к 2007 году? Что-нибудь более новое или достаточно стабильное для использования? http://www.vim.org/scripts/script.php?script_id=1813 –

+1

См. следующие очень похожие вопросы: «[Загрузка набора файлов, полученных с помощью команды в буферы Vim] (http://stackoverflow.com/ q/6870139/254635) «, [Эффективный способ рефакторинга класса/метода/строки в каталоге с помощью vim] (http://stackoverflow.com/q/7203963/254635)», «[Vim: Как я могу искать слово в целом/каталог рекурсивно?] (http://stackoverflow.com/q/7950558/254635) ". –

ответ

5

Вы можете использовать команду vim :vimgrep. Это будет искать шаблон в указанных файлах и помещает результаты в окно quickfix, которое затем можно использовать для перехода к определенному совпадению. Так, например, для поиска foo рекурсивно в каждом .php файла в текущем каталоге вы могли бы сделать

:vimgrep "foo" **/*.php 

Другим вариантом является команда :grep, которая на самом деле вызывает программу grep (или любой другой grepprg установлен в). Он также помещает результаты в окно quickfix для удобной навигации. Однако для этого требуется, чтобы у вас в вашей системе grep.

+0

Красивая, именно то, что я искал. –

4

vim - редактор, на самом деле не искатель файлов. Однако тривиально просто вызвать оболочку и запустить «grep». Предполагая, что вы находитесь на Unix-иш среде (TextMate - MacOs) В то время как в командном режиме, нажмите Ctrl-Z, и вы будете в командной строке, а затем сделать

grep somestring *.c 

, и вы получите все соответствует «somestring» в любых исходных файлах C.

После выполнения команды grepping просто выполните команду fg (переднем плане) и стрелу - обратно в VIM.

+1

Хорошая идея, мне нравится ваша рекомендация, и она работает хорошо. Еще лучше, когда я могу сделать grep somestring *.*, и он возвращает все экземпляры рядом с именами файлов. –

1

vimgrep будет работать, но если источник находится в Git, вы можете использовать отличный плагин https://github.com/tpope/vim-fugitive от tpope, который предоставляет :Ggrep, который висит с git grep для большей гибкости.

Если вы заинтересованы в конкретных объектах, которые вы ищете (функции, переменные и т. Д.), То вам интересна интеграция с ctags.

0

Похоже, что вам может понравиться функция поиска тегов vim в сочетании с ctags. ctags - это утилита, которая может быть использована для создания индекса (файла тегов) различных языковых объектов для исходного кода (полное дерево проекта, а не только каталог). В vim тег - это своего рода идентификатор, который можно подпрыгнуть или искать.

См ВИМ документацию:

 :help tagsrch 

Или:

http://vimdoc.sourceforge.net/htmldoc/tagsrch.html#ctags