Dalam file yang panjang, saya ingin mencari pola yang akan cocok dengan sekitar 200 baris atau lebih. Baris yang cocok berada di tempat acak dalam file.
Ketika sebuah baris cocok, hanya baris itu sendiri yang relevan, tidak ada konteks di atas atau di bawah.
Biasanya, saya akan mencari /
dan melompati pertandingan dengan n
.
Tetapi itu berarti hanya ada satu atau dua garis yang relevan pada layar sekaligus.
Apakah ada cara untuk menyembunyikan semua baris yang tidak cocok, saat menelusuri daftar baris hasil?
Pendekatan brute force akan menghapus semua garis yang tidak cocok, dan membatalkan penghapusan itu nanti. Tapi itu jelek dalam berbagai cara, bahkan jika itu tidak akan berakhir dengan gigih ...
:vimgrep
dapat disingkat menjadi:vim
:ccl[ose]
atau namun Anda biasanya menutup buffer (mis., Beralih ke sana dan:bd
). Anda dapat membuka kembali penyangga perbaikan cepat dengan menjalankannya:cw[indow]
lagi, dan itu akan menggunakan hasil vimgrep terakhir Anda.Anda dapat membuat daftar semua baris yang cocok dengan
(
:print
Perintah dapat dihilangkan; ini adalah default untuk:g
.)sumber
g/REgexp/p
) ... Masalahnya adalah Anda tidak dapat dengan mudah melompat ke salah satu pertandingan, ...g
. Saya berasumsi bahwa ini adalah pola global. Saya biasanya melakukan pencarian VI dengan garis miring/pattern
dan ini akan menemukan semua kejadian. Orang dapat menavigasi ke mereka dengan menekan surat itun
:g[lobal]
yang mengambil pola sebagai argumen. Anda akan menemukan semua detail di:help :global
.Anda dapat menggunakan opsi
foldmethod
danfoldexpr
untuk melipat garis yang tidak relevan.Setelah mencari, pencarian terakhir disimpan dalam
@/
register. Jadi, Anda dapat dengan mudah melipat semua yang tidak cocok dengan ini (hanya untuk satu baris):Metode yang lebih maju, seperti menambahkan beberapa tingkat lipat untuk garis konteks yang dapat Anda tampilkan atau sembunyikan, atau cocokkan beberapa baris, dapat ditemukan di Vim Tips Wiki .
sumber
set foldlevel=0
dibutuhkan? Tapi mungkin itu standar.:tab sp
mendapatkan tampilan membuang baru pada file. Lalu kembali sesederhana:close
atau cara lain untuk membunuh tab.Jika pesanan tidak masalah maka hanya memindahkan garis.
Untuk bantuan lebih lanjut lihat:
sumber
:g/pat/m$
(pindahkan garis yang cocok ke akhir) juga OK,[d] hapus semua garis yang bukan (!) yang cocok dengan pola:
atau bahkan lebih sederhana (terima kasih atas komentar oleh 'B Layer'):
sumber
:v
daripada:g!
. (Saya tidak ingat kapan terakhir kali saya melihat yang terakhir digunakan, TBH!)Jika Anda ingin membuat daftar semua baris yang cocok (seperti pada jawaban saya yang lain), dan kemudian beralih ke satu pasangan tertentu, plugin FindOccurrence saya menyediakan
[/
pemetaan untuk itu (dan[n
untuk pola pencarian terakhir, alih-alih menanyakan satu).[/pattern
daftar suka:g/pattern
, tetapi kemudian meminta jumlah pertandingan untuk melompat ke.sumber
Cara lain adalah menggunakan
:h :ilist
, saya menggunakannya untuk mendapatkan gambaran umum halaman manual. hasilnya terlihat seperti ini:Ini adalah fungsi kecil yang memungkinkan Anda memilih untuk pergi ke baris hasil dengan indeks:
Dapat digunakan seperti ini:
sumber