Vim: открытые файлы соответствий на строках, данных Grep?

Я хочу добраться автоматически до положений результатов в Vim после захвата на командной строке. Есть ли такая функция?

Файлы для открытия в Vim на строках, данных grep:

% grep --colour -n checkWordInFile *
SearchToUser.java:170:  public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:17:  public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:41:          if(checkWordInFile(word, f))
11
задан hhh 16 April 2010 в 13:55
поделиться

5 ответов

Взгляните на " Интеграция инструментов поиска Grep с Vim "и" Найти в файлах в Vim ". В основном vim предоставляет следующие команды для поиска файлов:

:grep
:lgrep
:vimgrep
:lvimgrep

В статьях содержится дополнительная информация об их использовании.

7
ответ дан 3 December 2019 в 01:08
поделиться

Я настоятельно рекомендую ack.vim вместо grep для этой функции.

http://github.com/mileszs/ack.vim

http://betterthangrep.com/

2
ответ дан 3 December 2019 в 01:08
поделиться

В этом конкретном примере:

vim SearchToUser.java +170
-2
ответ дан 3 December 2019 в 01:08
поделиться

Вы можете сделать это:

% vim "+/checkWordInFile" $(grep -l checkWordInFile *)

Это поместит в командную строку vim список всех файлов, соответствующих регулярному выражению. Опция «+ / ...» укажет vim искать с начала каждого файла, пока не найдет первую строку, соответствующую регулярному выражению.

Исправление:

Параметр + / ... будет искать регулярное выражение только в первом файле. Для поиска в каждом файле вам понадобится следующее:

% vim "-c bufdo /checkWordInFile" $(grep -l checkWordInFile *)

Если это что-то, что вам нужно делать часто, вы можете написать функцию bash, чтобы вам нужно было указать регулярное выражение только один раз (при условии, что регулярное выражение действительно и для grep, и для vim) .

5
ответ дан 3 December 2019 в 01:08
поделиться

Если вы перенаправляете вывод из grep в vim

% grep -n checkWordInFile * | vim -

, вы можете навести курсор на имя файла и нажать gF , чтобы перейти к строке в этом файле, на которую ссылается эта строка вывода grep. ^ WF откроет его в новом окне.

Изнутри vim вы можете сделать то же самое с

:tabedit
:r !grep -n checkWordInFile *

, что эквивалентно, но менее удобно, чем

:lgrep checkWordInFile *
:lopen

, которое вызывает суперфантастическое окно quickfix, чтобы вы могли удобно просматривать результаты поиска.

В качестве альтернативы вы можете получить более медленные, но в некотором смысле более гибкие результаты, используя собственный grep vim:

:lvimgrep checkWordInFile *
:lopen

Здесь используются RE и пути vim (например, разрешая **). Бег может занять в 2-4 раза больше времени (а может и больше), но вы можете использовать причудливые \ (\) \ @ <= и птицы пера.

27
ответ дан 3 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: