Katakanlah saya memiliki file yang sangat sederhana berikut ini
a
b
c
d
e
dan saya telah memutuskan bahwa saya ingin menambahkan baris kosong setelah setiap baris. Beberapa metode yang berbeda segera melompat ke pikiran saya. Kita mungkin melakukannya (dan dengan demikian menerima kegagalan). Kami mungkin merekam makro seperti qqo<ESC>jq
dan mengulanginya beberapa kali.
Dua metode lain tampak lebih jelas bagi saya pada saat itu.
Pertama, saya pikir saya akan mengeluarkan :norm
perintah o
di setiap baris. Jadi saya lari :%norm o
. Tapi yang sebenarnya terjadi adalah kita mendapatkan 5 baris kosong, diikuti oleh baris yang tidak terpisahkan seperti di atas. Saya menafsirkan ini berarti bahwa dengan %norm
, vim benar-benar mengambil pesan mengeluarkan perintah normal berikut pada lima baris pertama dari file lima baris ini . The o
perintah menciptakan baris baru dan vim adalah "bodoh" dalam arti bahwa itu referensi oleh nomor baris dan tidak benar-benar oleh beberapa pengenal lainnya.
Yah, saya malu. Tentu. Saya mencoba beberapa hal lain untuk melihat apakah saya dapat membuat metode di atas berhasil, tetapi sayangnya, saya tidak bisa. Karena penasaran, saya mencoba metode mass-apply favorit saya yang lain. Ini membuat saya mencoba :g/^/norm o
. Yang mengejutkan saya, ini bekerja dengan baik! Jadi bagi saya, sepertinya vim tidak "bodoh" di sini dengan cara yang sama seperti di atas dan mereferensikan baris dengan lebih dari sekedar nomor baris.
Apa yang sebenarnya terjadi?
sumber
:%s/$/\r/
, atau seperti ini::%s/\n/\r\r/
. Yang perlu diperhatikan adalah bahwa baris baru dapat dicocokkan dengan\n
, tetapi harus ditulis sebagai\r
nilai pengganti.Jawaban:
Yah,
%
adalah singkatan untuk1,$
(rentang dari baris pertama ke yang terakhir). Dari:he :%
:Dan untuk
:global
:Jadi, kasus pertama adalah seperti melintasi daftar saat memodifikasinya, sehingga penghitung pada elemen daftar menjadi tidak valid. Dalam kasus kedua, kita menandai elemen yang ingin kita targetkan dalam satu pass, sehingga meskipun daftar tersebut dimodifikasi pada pass kedua, kita masih tahu elemen mana yang ingin kita kerjakan.
sumber
g
banyak berguna gila. Saya harus menghabiskan lebih banyak waktu untuk beralih dari pengguna vi rata-rata menjadi pengguna yang kuat