Vim: bagaimana cara menempelkan blok teks di akhir beberapa baris?

32

Katakanlah saya memiliki blok teks seperti ini:

// Komentar1
// Komentar2
// Komentar3

Dan saya ingin menambahkan setiap baris ini ke akhir 3 baris kode yang sesuai:

foo = 1;
bar = 2;
baz = 3;

Sehingga hasil akhirnya adalah

foo = 1; // Komentar1
bar = 2; // Komentar2
baz = 3; // Komentar3

Apakah ada cara mudah untuk melakukan ini di Vim?

Tim
sumber
@Flimzy, sayangnya tidak. Dari waktu ke waktu komentar seperti milik Anda muncul di pertanyaan Vim, tetapi periksa ini: meta.stackexchange.com/q/25925/160504
sidyll
Komunitas yang lebih baik untuk pertanyaan ini adalah vi.stackexchange.com
thinwybk

Jawaban:

36

Gunakan mode blok visual ( Ctrl+ v) untuk memilih satu set garis, lalu salah satu yatau dmereka.

Kemudian, jika Anda memilih foo, bar, garis baz, gunakan mode blok visual lagi untuk memilih kolom pertama dari baris komentar dan kemudian Shift+ pmereka ke tempatnya (atau jika Anda memilih baris komentar, pilih kolom terakhir dari foo bar baz garis dan pmereka ditempatkan.

Menguasai posisi mungkin membutuhkan sedikit latihan, tetapi ketika Anda memiliki keahlian, Anda akan terbang. Ketika Anda memiliki blok yang dipilih, Anda juga dapat menggunakan Shift+ Auntuk menambahkan mis. Spasi ke blok (saat menambahkan, teks baru hanya akan muncul di baris atas, tetapi ketika Anda menekan esc maka secara ajaib akan muncul di semua baris yang dipilih) . Demikian pula, Shift+ iakan melakukan hal yang sama di awal blok yang dipilih pada setiap baris.

Anda harus membersihkan garis kosong setelahnya.

Ada juga episode vimcast hebat yang menunjukkan teknik ini secara lebih rinci.

tindakan udang
sumber
1
Saya menemukan solusi ini digabungkan dengan :set ve=allmenjadi sangat fleksibel. Saya pribadi menggunakan plugin UnconditionalPaste ( vim.org/scripts/script.php?script_id=3355 ) karena cocok dengan kebutuhan saya sedikit lebih baik.
Peter Rincker
1

Baik, apakah itu mudah atau tidak, Anda memberi tahu saya. Arahkan ke // Comment 1, tekan dduntuk menghapus. Arahkan ke garis dengan foo = 1;dan tekan p, untuk menempel di bawah garis. Bergerak ke atas foolagi, dan tekan Juntuk bergabung dengan baris. Tada.

TLP
sumber
0

Berikut ini akan melakukan apa yang Anda gambarkan:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

Bergantung pada apa yang sebenarnya perlu Anda lakukan (sebagai lawan dari contoh), dalam praktiknya, mungkin lebih mudah untuk memblokir-pilih blok "// Comment1" dll. ( Ctrlv), Yank ( y), lanjutkan ke akhir kode blokir dan tempel.

Jeet
sumber