При использовании grep из VIM, как перейти к результатам?


32

При использовании плагина grep для VIM я могу искать в текущем каталоге все вхождения строки в наборе файлов, например так:

:grep Ryan *.txt

Это выводит что-то вроде этого:

file1.txt:3:Ryan was here
file2.txt:10:Ryan likes VIM
file3.txt:5:superuser.com is a fav of Ryan
(1 of 3): Ryan was here
Press ENTER or type command to continue

Если я нажимаю ввод, он просто возвращает меня в мой редактор. Что я действительно хочу сделать, так это иметь возможность открыть один из этих файлов и перейти к месту, где была найдена строка. Есть ли способ сделать это? Эта 1 of 3часть заставляет меня думать, что есть способ просмотреть результаты, но я не знаю, какие команды мне доступны. Кто-нибудь может пролить свет на это?

Ответы:


34

Когда вы нажимаете ENTER, вы должны смотреть на строку 3 файла file1.txt. Чтобы перейти к следующему совпадению, выполните команду :cn; чтобы перейти к предыдущему совпадению, выполните :cp. Выполнение :copenоткроет окно со списком совпадений. Переместите курсор к желаемому совпадению и нажмите ENTER, чтобы перейти к этому совпадению.

Подробнее об использовании :grepсм.

:help grep
:help quickfix.txt

Ввод :cnи :cpперемещение вперед и назад в списке быстрых исправлений может быть неудобным, поэтому я использую следующие сопоставления:

nmap <silent> <C-N> :cn<CR>zv
nmap <silent> <C-P> :cp<CR>zv

Кроме того, :grepкоманда не является плагином; это часть Vim.


Отличный ответ, спасибо! Кстати, вы можете сделать рекурсивный поиск по папкам с помощью vim grep?
Marplesoft

Пока вы работаете в системе Unix, вы можете добавлять любые аргументы в Vim, :grepкоторые вы добавляете в grepкоманду, выполняемую из оболочки. Таким образом, вы можете выполнить рекурсивный поиск по всем файлам .txt внутри и ниже текущего каталога с помощью :grep -R --include=*.txt Ryan .. Вы также можете выполнить рекурсивный поиск с помощью команды Vim :vimgrep, но аргументы отличаются, и я редко использую, потому что это медленнее, чем :grep.
garyjohn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.