Sembunyikan semua (tidak) baris yang cocok di Vim

87

Apakah mungkin untuk menampilkan / menyembunyikan semua baris yang cocok di vi atau Vim? Bukan sorotan tetapi hanya menampilkan garis-garis itu saja.

Misalnya saya memiliki teks dengan kata kata ERROR. Bagaimana cara membuatnya hanya menampilkan baris yang berisi ERRORdan bagaimana cara menampilkan hanya baris tanpa ERROR?

Apakah ada solusi tanpa menghapus semua baris yang cocok dan kemudian membatalkannya?

Alex Bolotov
sumber

Jawaban:

109

Apakah Anda tahu tentang :globalperintah itu? Apakah ini sesuai dengan keinginan Anda?

:g/ERROR

dan sebaliknya:

:g!/Error

atau setara:

:v/Error
pengguna55400
sumber
19
Ini tidak terlalu bagus. Setelah Anda menggulir ke bawah, maka perintah selesai dan semuanya muncul kembali. Itu tidak benar-benar menyembunyikan konten itu.
Kan Li
@KanLi tekan g<untuk melihat lagi, atau @:jika Anda belum menjalankan dan perintah.
D.Ben Knoble
53

Pendekatan lain yang bergantung pada kasus penggunaan Anda akan menggunakan vimgrep dan hasilnya dalam perbaikan cepat . Anda dapat melakukan hal berikut:

:vimgrep pattern %akan mencari file saat ini dan membawa Anda ke hasil pencarian pertama. Lebih penting lagi, ini juga menempatkan hasil di "daftar perbaikan cepat".

:copenkemudian akan membuka daftar quickfix di jendela quickfix terpisah. Jadi Anda akan memiliki jendela terpisah dengan semua baris dari vimgrep terakhir Anda. Di dalam jendela quickfix, Anda dapat menekan Enter atau mengklik dua kali pada baris untuk melompat ke baris yang sesuai di file asli Anda.

:colderakan membiarkan Anda kembali ke daftar quickfix yang lama (hasil vimgrep yang lebih lama). Dan :cnewermaju ke hasil pencarian yang lebih baru.

Perhatikan bahwa daftar quickfix juga diperbarui saat dijalankan :make(itulah sebabnya disebut quickfix untuk memperbaiki kesalahan). Karena itu, ada juga perubahan pada daftar quickfix yang disebut "daftar lokasi". Untuk menggunakannya sebagai gantinya Anda menggunakan :lvimgrep, kemudian gunakan perintah l-diawali daripada perintah c-diawali - :lopen, :lolder, :lnewer.

Tentu saja masih banyak yang bisa Anda lakukan. Lihat :help quickfixuntuk info lebih lanjut.

PS, Anda mengatakan Anda tidak menginginkan pendekatan yang menghapus garis dan kemudian membatalkannya. Tetapi karena Anda menandai g/ERRORsebagai jawaban saya pikir saya akan menunjukkan cara cepat dan kotor untuk dilakukan g!/ERROR/d. Anda kemudian dapat dengan mudah membatalkannya menggunakan u. Juga FYI, Anda dapat melakukannya :set hlsearchuntuk menyorot pola yang cocok dengan :gperintah.

studgeek
sumber
1
Terima kasih atas tip tentang ": g! / ERROR / d" lebih baik daripada jawaban yang diterima.
VinGarcia
Dapatkah Anda melakukan ini dengan garis yang tidak cocok dengan polanya?
Jacktose
26

Cara terbaik untuk melakukannya adalah->

:vimgrep /something/g % | copen

Ini akan membuka daftar pencocokan untuk kata kunci Anda dan juga akan menampilkan hanya baris yang cocok di jendela perbaikan cepat.

Ganti% dengan path ke file jika tidak mempertimbangkan file saat ini.

Shivendra
sumber
1
Ganti% dengan jalur file jika Anda tidak mempertimbangkan file saat ini.
Shivendra
Dapatkah Anda melakukan ini dengan garis yang tidak cocok dengan polanya?
Jacktose
2

jika Anda kebetulan menggunakan, fzfAnda dapat menggunakan:

  • :Lines di semua file terbuka
  • :BLines hanya di buffer terbuka
  • :Rg [pattern] menggunakan ripgrep
minusf
sumber
1

:vimgrep /something/g % | copenbekerja dengan baik. Juga :g/<pattern>/ddapat digunakan untuk menghapus garis dengan pola

sevvalai
sumber
Ini adalah jawaban yang tepat untuk pertanyaan ini.
Shivendra
1

Beberapa cara kotor hackish untuk melakukan ini:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)
Boris Churzin
sumber
0

Yang Anda maksud adalah perintah di vim yang lebih sedikit & / pattern / yang menunjukkan baris yang berisi / pattern / (seperti grep).

charkh
sumber