Menarik dan menempel sambil menambah

14

Saya mengedit file .sql di Vim:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),

Yang ingin saya lakukan adalah mencabut (1, 1),garis dan menempelnya 137 kali; Namun, saya ingin angka kedua dalam kurung akan bertambah setiap kali. Outputnya akan terlihat seperti:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),

Apakah ada cara untuk melakukan itu di Vim dan, jika demikian, perintah apa yang akan saya gunakan?

Terima kasih!

smoothgrips
sumber

Jawaban:

11

Letakkan kursor Anda di (1, 1),baris lalu ketik:

qaVypt)<C-a>q135@a

Penjelasan:

qamulai merekam makro di dalam register a (Anda dapat memilih surat lain).

Vyp menduplikasi baris saat ini, dengan memilih seluruh baris (V), menyalinnya (y) dan kemudian menempelkannya di bawah (p).

t) pindahkan kursor sesaat sebelum tanda kurung tutup berikutnya, sehingga di nomor kedua.

<C-a>( Ctrldan a) menambah nomor.

q mengakhiri rekaman makro.

135@areplay makro disimpan dalam register sebuah 135 kali.

Sunting: Peter Rincker memiliki perintah lebih pendek:

qqYpW<c-a>q135@q

Perbedaannya adalah:

ia menggunakan register q untuk menyimpan makro (lebih cepat mengetik qqdaripada qakarena itu adalah kunci yang sama),
ia menyalin garis dengan hanya satu penekanan tombol Y(bukan dua Vy),
dan memindahkan kursor ke nomor kedua dengan hanya satu penekanan tombol W(bukan dari t)).

saginaw
sumber
4
Golf vim: qqyypW<c-a>q135@q. Bahkan lebih pendek jika Anda menggunakan Ybukan yy.
Peter Rincker
9

Vims baru-baru ini telah belajar tentang penambahan wilayah yang dipilih secara visual serta membuat urutan. Jadi Anda bisa melakukan ini setelah menempelkan baris Anda 137 kali:

1) secara visual blok-pilih ( Ctrl-V) yang kedua mulai dari baris 3.

2) tekan gCtrl-A

Saya telah merekam pemeran layar di sini

Penafian: Ini membutuhkan Vim 7.4.900 atau lebih.

Christian Brabandt
sumber
Berhasil diuji dalam Vim 7.4.826 pada Debian / sid.
Dubu
Screencast Anda telah menghilang tetapi metode ini LUAR BIASA! Terima kasih.
david_nash
2

The mudah dimengerti / mudah diingat / mudah beradaptasi dengan situasi lain cara untuk melakukannya: menggunakan VisIncr plugin (jika Anda lebih suka menggunakan versi yang benar-benar bermain bagus dengan manajer paket dari abad ini sebagai lawan berurusan dengan vimballs , Anda bisa mendapatkannya dari GitHub ). Dengan itu:

  • pergi ke (1, 1),garis dan menariknya:Vy
  • rekatkan 136 kali: 136p
  • buka kolom kedua 1dan tandai secara vertikal:C-vGf)h
  • jalankan kenaikan: :II
  • membaca manual untuk mengetahui tentang barang lainnya: :help visincr.
Sato Katsura
sumber
1

Saya akan bermain dengan g^a.

Coba 137i0^v137kg^a.

Moisès
sumber
1
Selamat datang di Vi dan Vim ! Saya telah memformat jawaban Anda menggunakan penurunan harga. Akan lebih baik jika Anda mengedit untuk menjelaskan bagaimana ini menjawab pertanyaan OPs.
D. Ben Knoble