Я хочу добраться автоматически до положений результатов в 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))
Взгляните на " Интеграция инструментов поиска Grep с Vim "и" Найти в файлах в Vim ". В основном vim предоставляет следующие команды для поиска файлов:
:grep
:lgrep
:vimgrep
:lvimgrep
В статьях содержится дополнительная информация об их использовании.
Я настоятельно рекомендую ack.vim вместо grep для этой функции.
В этом конкретном примере:
vim SearchToUser.java +170
Вы можете сделать это:
% vim "+/checkWordInFile" $(grep -l checkWordInFile *)
Это поместит в командную строку vim список всех файлов, соответствующих регулярному выражению. Опция «+ / ...» укажет vim искать с начала каждого файла, пока не найдет первую строку, соответствующую регулярному выражению.
Исправление:
Параметр + / ... будет искать регулярное выражение только в первом файле. Для поиска в каждом файле вам понадобится следующее:
% vim "-c bufdo /checkWordInFile" $(grep -l checkWordInFile *)
Если это что-то, что вам нужно делать часто, вы можете написать функцию bash, чтобы вам нужно было указать регулярное выражение только один раз (при условии, что регулярное выражение действительно и для grep, и для vim) .
Если вы перенаправляете вывод из 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 раза больше времени (а может и больше), но вы можете использовать причудливые \ (\) \ @ <=
и птицы пера.