Mengingat hasil grep -n, bagaimana saya bisa membuka vim pada baris tertentu? (hanya menggunakan keyboard)

9

Ketika saya menjalankan grep "keyword" -ndan mendapatkan daftar hasil berikut:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

Bagaimana saya bisa membuka salah satu file (katakanlah daftar ke-2) di baris yang ditemukannya?

Saya sekarang hanya menyalin output menggunakan mouse saya, dan salin setelah vimdan kemudian tambahkan +dengan nomor baris yang saya salin. (artinya saya menulis vim a/b/c +70menggunakan salinan mouse untuk mendapatkan nama file, dan salinan mouse lain untuk mendapatkan nomor baris [atau saya hanya menyalinnya dengan tangan, ketika cukup pendek])

Apakah ada cara untuk melakukannya dengan pintasan keyboard?

CIsForCookies
sumber
Anda dapat mencoba sesuatu seperti itu: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabczyk
2
Juga, jika Anda tertarik untuk menggunakan Vim secara lebih efisien, silakan kunjungi situs khusus Vi dan Vim Stack Exchange.
muru

Jawaban:

14

Dua hal:

  1. Vim memiliki beberapa dukungan untuk grep.

    Jika Anda membuka Vim, dan lakukan :grep keyword ..., Vim mengisi daftar perbaikan cepat dengan hasilnya, dan melompat ke file pertama. Anda kemudian dapat melompat ke entri perbaikan cepat ke n dengan :cc n(dan perintah lain).

  2. Anda dapat mengisi daftar perbaikan cepat yang disebutkan di atas menggunakan output grep:

    vim -q <(grep -n keyword ...)
    

    Dan kemudian gunakan perintah navigasi perbaikan cepat yang disebutkan di atas.

Entah lebih sederhana daripada bermain-main dengan output grep secara manual.

Sebagai alternatif untuk (2), Anda dapat menyimpan output grep ke file dan menggunakan file itu sebagai gantinya, jika Anda pikir Anda tidak perlu membuka Vim setelah:

grep ... | tee log
vim -q log
muru
sumber
Mencoba menggunakan metode yang sama pada status git, tetapi tidak berhasil :( - vim -q <(status git | grep dimodifikasi)
CIsForCookies
3
@CIsForCookies Itu tidak akan dalam format yang sama dengan grep -n( <filename>:<line>: ...). Saya menggunakan plugin buron untuk Git, dan kemudian :Gstatus, pindah ke file yang diinginkan dan tekan Enter.
muru
BTW, saya mengedit ~ / .bashrc saya grep alias untuk selalu menggunakan warna, dan itu, untuk beberapa alasan, merusak -q >()opsi ...
CIsForCookies
2

Anda bisa membuatnya jadi jika belum ada dukungan untuk grep seperti yang dijawab @muru:

:cexpr system("grep -n keyword")

Ini dapat digunakan dengan perintah lain, git grepmisalnya.

Anda juga dapat membuka output di buffer dan menggunakan "cbuffer" di atasnya.

Lihat bagian perbaikan cepat dari manual tentang hal itu.

max630
sumber