Saya bisa menggunakan
:5,12s/foo/bar/g
untuk mencari foodan menggantinya di barantara baris 5 dan 12. Bagaimana saya bisa melakukannya hanya di baris 5 dan 12 (dan bukan di baris di antaranya)?
Saya bisa menggunakan
:5,12s/foo/bar/g
untuk mencari foodan menggantinya di barantara baris 5 dan 12. Bagaimana saya bisa melakukannya hanya di baris 5 dan 12 (dan bukan di baris di antaranya)?
Jawaban:
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:
:5s/foo/bar
:12&
Seperti yang ditunjukkan oleh Ingo, :&lupakan benderamu. Karena Anda menggunakan /g, perintah yang benar adalah :&&:
:5s/foo/bar/g
:12&&
Lihat :help :&dan teman-teman.
:&untuk digunakan. Jika ada bendera ( s/../../g), seseorang harus menggunakan :&&, meskipun ...
\(\%5l\|\%12l\)lebih tidak jelas daripada:&
Anda selalu bisa menambahkan a cdi akhir. Ini akan meminta konfirmasi untuk setiap pertandingan.
:5,12s/foo/bar/gc
gbendera dalam permainan)
n5 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 :goperatornya. Jika file Anda terlihat seperti ini (angka hanya untuk referensi):
1 line one
2 line one
3 line one
4 line one
5 enil one
6 line one
7 line one
8 line one
9 line one
10 line one
11 line one
12 enil one
Dan Anda ingin mengganti onedengan enopada baris di mana ada enilsebagai ganti line:
:g/enil/s/one/eno/
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:
ed file <<EndCommands
5
s/foo/bar/g
7
s/foo/bar/g
wq
EndCommands
Jelas, perintah ed dapat digunakan pada baris perintah juga.
vimalternatifnya.
:s, tetapi masih ada duplikasi :sperintah (yang dihindari oleh solusi romainl).
sed, meskipun ...