Saya bisa menggunakan
:5,12s/foo/bar/g
untuk mencari foo
dan menggantinya di bar
antara baris 5 dan 12. Bagaimana saya bisa melakukannya hanya di baris 5 dan 12 (dan bukan di baris di antaranya)?
Vim memiliki atom ekspresi reguler khusus yang cocok dalam baris, kolom, dll. Tertentu; Anda dapat menggunakannya (mungkin sebagai tambahan dari jangkauan) untuk membatasi kecocokan:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
Lihat :help /\%l
Anda dapat melakukan substitusi pada baris 5 dan mengulanginya dengan sedikit usaha pada baris 12:
Seperti yang ditunjukkan oleh Ingo,
:&
lupakan benderamu. Karena Anda menggunakan/g
, perintah yang benar adalah:&&
:Lihat
:help :&
dan teman-teman.sumber
:&
untuk digunakan. Jika ada bendera (s/../../g
), seseorang harus menggunakan:&&
, meskipun ...\(\%5l\|\%12l\)
lebih tidak jelas daripada:&
Anda selalu bisa menambahkan a
c
di akhir. Ini akan meminta konfirmasi untuk setiap pertandingan.sumber
g
bendera dalam permainan)n
5 atau 6 kali lebih berat daripada menambahkan\(\%5l\|\%12l\)
ke pernyataan pengganti?Pertanyaan menarik. Sepertinya hanya ada pilihan rentang dan tidak ada pilihan banyak garis:
http://vim.wikia.com/wiki/Ranges
Namun, jika Anda memiliki sesuatu yang istimewa di jalur 5 dan 12, Anda dapat menggunakan
:g
operatornya. Jika file Anda terlihat seperti ini (angka hanya untuk referensi):Dan Anda ingin mengganti
one
denganeno
pada baris di mana adaenil
sebagai gantiline
:sumber
Anda dapat menggunakan
ed
- editor teks berorientasi garis dengan perintah yang mirip dengan vi dan vim. Ini mungkin mendahului vi dan vim.Dalam skrip (menggunakan dokumen di sini yang memproses input hingga penanda EndCommand) akan terlihat seperti:
Jelas, perintah ed dapat digunakan pada baris perintah juga.
sumber
vim
alternatifnya.:s
, tetapi masih ada duplikasi:s
perintah (yang dihindari oleh solusi romainl).sed
, meskipun ...