Bagaimana cara mengganti sebagian teks dalam blok teks yang dipilih?

14

Tidak mudah menemukan judul yang bagus untuk masalah saya.

Saya sadar menyisipkan di depan blok teks:

Ctrl- v pilih jenis teks barisI ESC

Sekarang saya ingin melakukan ini tetapi juga dengan mengganti bagian dalam pemilihan blok saya. Saat ini saya sedang melakukan dua operasi

Ctrl- v pilih blok x kembali untuk memulai

Diikuti oleh urutan yang saya sebutkan di atas.

Apakah ada cara untuk menggabungkan kedua operasi ini dengan memilih ( Ctrl- v) blok hanya sekali?

Ini adalah contoh kecil:

Saya ingin mengubah blok berikut

1  text
2  text
3  text
4  text
5  text

ke

new text 
new text 
new text 
new text 
new text

hanya melakukan satu "operasi".

Patrick B.
sumber
1
Saya tidak 100% yakin apa yang Anda inginkan, mungkin contoh nyata akan membantu (apa yang Anda miliki vs apa yang Anda inginkan). Apakah Anda mengetahui gv? Ini memilih kembali pemilihan visual terakhir dan mungkin bisa membantu di sini.
PhilippFrank

Jawaban:

21

Mengetik csetelah memilih blok Anda alih-alih xakan menghapus teks di blok pilihan dan akan masuk ke mode insert. Setelah Anda mengetik sesuatu dan keluar dari mode penyisipan, Anda harus memiliki perubahan yang sama di setiap baris.

Mencoba

Ctrl- v- pilih blok - c- masukkan apa pun -Esc

Dumitru
sumber
1
    1
   1 1
  1   1
 1111111
 1     1
 1     1
 1     1

Bayangkan deretan tiga huruf besar seperti yang ada di atas. ^Vmemilih di atas, saya tidak bisa mengubah semua menjadi Adalam huruf terakhir di baris karena garis panjang yang tidak sama. Huruf blok sebelumnya berfungsi baik dengan :s/\%V1/T/g "Huruf blok sebelumnya adalah huruf T yang dibuat dari '1. Ubah /T/ke apa pun.

Tetapi memilih huruf blok terakhir yang ditunjukkan di atas hanya mengubah semua '1 ke' A ke titik A *, dan sisanya tetap yang.

* Garis terpendek.

Untuk membuat semua garis dengan panjang yang sama, saya mengisinya dengan spasi. (Saya baru untuk vim, jadi saya yakin naskah yang lebih baik dapat ditulis.)

Catatan: Puncak A dimulai pada baris 2.

let Maxlen = 0
" Find longest line
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a > Maxlen
        Maxlen = a
    endif
endfor

" Append spaces 'til all lines are the same length.
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a < Maxlen
        let b = Maxlen - a
        execute "normal!" . i . "gg0" . b . "A "
    endif
endfor

Setelah ini, :s/\%V1/T/g berfungsi seperti yang diiklankan pada huruf besar terakhir di baris.

PS Saya membaca bahwa executebaris di atas seharusnya bekerja tanpa titik-titik, tetapi tidak berhasil untuk saya.

Ron
sumber
Eksekusi baris, kebagian awal baris i dari huruf besar dan tambahkan b spasi di akhir baris. 'b' adalah perbedaan panjang antara garis saat ini dan garis terpanjang.
Ron