Ganti pola dengan nomor baris saat ini


15

Saya ingin mengganti 'x' dalam file ini dengan nomor baris saat ini. Yaitu, berubah

x
x
x

untuk

1
2
3

Untuk saat ini, saya menggunakan Perl one-liner:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

Saya pikir UltraEdit dapat melakukannya dengan memilih dan mengganti vertikal. Bisakah ini dilakukan dalam vim? (Contoh saya di sini mengasumsikan 'x' adalah semua yang ada di satu baris. Tapi baris di file asli saya jauh lebih rumit.)

Jawaban:


23

Ya, vim dapat melakukan ini! Lakukan pencarian global untuk x, dan ganti dengan \=printf("%d", line('.'). Sebagai contoh:

:%s/x/\=printf("%d", line('.'))

Anda juga dapat mengubah xke pencarian lain, jika perlu.

Penjelasan:

Ini menggantikan setiap kemunculan x(atau apa pun yang Anda cari) dengan register evaluasi \=. Register ini mengevaluasi kode vimscript, dan mengembalikan sebuah string. Dalam hal ini, kode yang sedang dievaluasi adalah "Cetak baris kita sebagai angka desimal"


9

Karena Anda menyebutkan pemilihan dan penggantian vertikal, Anda dapat melakukannya juga. Gunakan CtrlVuntuk memilih kunci teks yang ingin Anda ganti, lalu cdan ketik 0, untuk menggantinya dengan 0s. Lalu, pilih yang 0s:

masukkan deskripsi gambar di sini

Kemudian tekan g<c-a>( g+ Ctrla):

masukkan deskripsi gambar di sini

Jika Anda telah mengganti satu kolom, maka Anda dapat menggunakan gvuntuk dengan cepat memilih kembali area yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.