Saat menggunakan grep dari VIM, bagaimana cara melompat ke hasil?

32

Saat menggunakan plugin grep ke VIM, saya dapat mencari direktori saat ini untuk semua kemunculan string dalam satu set file, seperti ini:

:grep Ryan *.txt

Ini menghasilkan sesuatu seperti ini:

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

Jika saya menekan enter, itu hanya membawa saya kembali ke editor saya. Yang benar-benar ingin saya lakukan adalah dapat membuka salah satu file itu dan melompat ke tempat di mana string itu ditemukan. Apakah ada cara untuk melakukan ini? Bagian ini 1 of 3membuat saya berpikir ada cara untuk memeriksa hasilnya, tetapi saya tidak tahu perintah apa yang tersedia untuk saya. Adakah yang bisa menjelaskan ini?

Marplesoft
sumber

Jawaban:

34

Saat Anda menekan ENTER, Anda seharusnya melihat baris 3 file1.txt. Untuk melompat ke pertandingan berikutnya, jalankan :cn; untuk melompat ke pertandingan sebelumnya, jalankan :cp. Eksekusi :copenakan membuka jendela yang berisi daftar kecocokan. Pindahkan kursor ke pertandingan yang diinginkan dan tekan ENTER untuk melompat ke pertandingan itu.

Untuk lebih lanjut tentang penggunaan :grep, lihat

:help grep
:help quickfix.txt

Mengetik :cndan :cpuntuk bergerak maju dan mundur dalam daftar perbaikan cepat dapat menjadi canggung, jadi saya menggunakan pemetaan ini:

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

Juga, :grepperintahnya bukan plugin; itu bagian dari Vim.

garyjohn
sumber
Jawaban yang bagus, terima kasih! BTW, dapatkah Anda melakukan pencarian rekursif melalui folder dengan vim grep?
Marplesoft
Selama Anda menjalankan sistem Unix, Anda bisa menambahkan argumen apa pun ke Vim :grepyang akan Anda tambahkan ke grepperintah yang dijalankan dari shell. Jadi, Anda bisa melakukan pencarian berulang melalui semua file .txt di dan di bawah direktori saat ini dengan :grep -R --include=*.txt Ryan .. Anda juga dapat melakukan pencarian rekursif menggunakan :vimgrepperintah Vim , tetapi argumennya berbeda dan saya jarang menggunakannya karena lebih lambat daripada :grep.
garyjohn