Як використовувати 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

Якщо я натискаю Enter, це просто поверне мене до мого редактора. Те, що я дійсно хочу зробити, - це в змозі відкрити один із цих файлів і перейти до місця, де було знайдено рядок. Чи є спосіб це зробити? 1 of 3Частина змушує мене думати , що є спосіб вкладки через результати, але я не знаю , які команди доступні для мене. Чи може хтось пролити на це світло?

Відповіді:


34

Коли ви натискаєте ENTER, ви повинні дивитись у рядок 3 файлу1.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.


Чудова відповідь, дякую! BTW, чи можете ви робити рекурсивний пошук через папки з vim grep?
Marplesoft

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