Jika saya ingin menghapus setiap kata, itu mudah, karena saya akan melakukan sesuatu seperti ini:
:s%/WORD//g
Tetapi bagaimana jika saya ingin melakukan xyz
setiap kemunculan "WORD"? Misalnya, katakanlah saya ingin menghapus setiap baris yang berisi "WORD". Saya dapat memikirkan beberapa cara untuk melakukan ini, tetapi tidak satupun dari mereka yang tampak ideal.
1)
/WORD
dan kemudian tekan secara manual ddnddnddnddn...
sampai tidak ada lagi kejadian. Tapi ini memakan waktu jika ada banyak jalur untuk melakukan ini.
2)
qd/WORD<enter>ddq
lalu tebak berapa kali KATA muncul, lalu, misalnya:
500@d
Tapi ini akan baik A) kehilangan banyak baris atau B) menghapus banyak baris tambahan.
Apakah ada cara yang lebih baik untuk melakukan ini?
500@d
seperti yang Anda jelaskan sebenarnya aman. Pemutaran makro akan berhenti setelah istilah pencarian tidak ditemukan. Jadi Anda hanya akan melihat kesalahan "Pola tidak ditemukan: KATA" setelah semua baris yang mengandungnya telah dihapus.Jawaban:
Anda dapat menggunakan
:global
dan:normal
memerintahkan untuk ini. The:global
perintah memiliki sintaks berikut:Ini akan menjalankan "perintah" pada setiap kemunculan "pola". Anda kemudian dapat menggunakan
:normal
perintah untuk menjalankan serangkaian penekanan tombol pada setiap kemunculan kata menggunakan:global
. Seperti itu:Jika penekanan tombol tersebut melibatkan tombol khusus seperti
<Ctrl>
, Anda dapat menggabungkannya dengan:execute
perintah seperti ini:Perhatikan bahwa Anda harus meletakkan backslash sebelum setiap kemunculan kunci khusus.
Untuk lebih lanjut tentang perintah ini, lihat
:help :normal
dan:help :global
.sumber
Hanya untuk kelengkapan, Anda dapat menggunakan
:substitute
, jika Anda cocok - dalam contoh Anda (hapus seluruh baris yang memiliki KATA) - seluruh baris yang berisi KATA, misalnya:Ini memiliki implisit "ganti kecocokan dengan apa-apa", yaitu bentuk yang lebih pendek dari:
Dikombinasikan dengan
\zs
,\ze
,\(
-\)
(pengelompokan), dan\=
(di bagian penggantian) dengansubmatch()
,:substitute
bisa sangat kuat.sumber
Sepertinya Anda sedang mencari
:global
.sumber
:delete
dan bukan operasi mode normald
.:normal
. Dan jika Anda memerlukan kunci khusus, Anda bahkan mungkin perlu:exe
-> `exe" aFooFar normal \ <esc> "