Bagaimana saya bisa menghasilkan daftar nomor urut, satu per baris?


38

Mulai dari batu tulis kosong, bagaimana saya bisa mendapatkan dokumen yang berisi

1
2
3
4
5
6
7
8
9
10
…
100

Agar jelas, saya tidak ingin angka-angka ini ditampilkan di margin; Saya ingin mereka dimasukkan ke dalam dokumen itu sendiri.

Jawaban:


51

Gunakan :putdan range():

:put =range(1,100)

Untuk menghindari baris kosong di bagian atas ( pujian ke romainl ), gunakan :0put:

:0put =range(1,100)

1
Atau dalam mode insert dengan <C-r>=range(1,100).
Hotschke

18

Selain Undo pure-vim :put =range(1,100)(yang benar-benar membuat Anda dengan baris kosong di bagian atas), Anda dapat, tergantung pada OS Anda, gunakan salah satu dari perintahnya. Misalnya, pada kotak Unix / Linux:

%!seq 1 100

Di atas bekerja dengan memipakan seluruh buffer (kosong) ke seq, yang mengabaikan inputnya dan hanya menampilkan angka 1 hingga 100. Vim kemudian mengganti seluruh buffer dengan seqoutput.

Itu berguna ketika Anda sudah terbiasa dengan beberapa cara baris perintah untuk mendapatkan apa yang Anda inginkan.


Ini "membuka" pertanyaan yang mengapa saya pikir itu lebih baik daripada yang diterima. Ya, Anda dapat membuat vim melakukan pekerjaan, sama seperti Anda dapat menggunakan kunci pas bulan sabit untuk mengaduk sup. Vim adalah editor teks, bukan generator teks yang sewenang-wenang; ada banyak alat yang lebih jelas untuk itu.
msw

16

Sebagai catatan, dan jelas bukan cara terpendek (lihat solusi luar biasa @ Undo), tetapi urutan penekanan tombol akan melakukannya juga:

i1EscqaYpCtrl+aq98@a

Biarkan saya memecahnya untuk Anda:

  1. i1<Esc> - masukkan angka 1, lalu kembali ke mode perintah
  2. qa - mulai merekam makro dalam register "a"
  3. Y - salin baris saat ini
  4. p - rekatkan garis saat ini (kursor juga akan pindah ke garis yang ditempelkan)
  5. <Ctrl>a - menambah nomor berikutnya di telepon, menjadikannya 2
  6. q - berhenti merekam makro (sudah mendaftar "a")
  7. 98@a - memutar ulang makro dalam register "a" 98 kali

5

Berikut adalah pendekatan yang berbeda, yang membutuhkan Vim yang lebih baru (sekitar 7.4.800)

Ini mengasumsikan buffer kosong dan '1' dalam register a. Pertama masukkan 100 1 ke buffer Anda "a100P,.

Kemudian pilih secara visual garis 2 hingga 100 :2EnterVG.

Sekarang tekan gCtrl+ A.

Baca bantuan di :h v_g_CTRL-A


Anda harus menambahkan let @ a = "1" dalam jawaban Anda. Para pemula mungkin terjebak untuk menemukan cara menyimpan nilai 1 dalam daftar a.
SibiCoder

Saya telah melihat gCtrl + Combo dalam solusi serupa lainnya. Namun saya belum dapat menemukan penjelasan tentang apa yang dilakukannya / bagaimana cara kerjanya? Apakah Anda memiliki referensi dalam dokumentasi yang menjelaskan apa yang dilakukan g? Terima kasih! Jika saya menemukan penjelasan saya akan mempostingnya.
codingFoo

1
dokumentasi ada di:h g_CTRL-A
Christian Brabandt

Saya telah melewatkan tautan ke bagian v_g_CTRL-A.
codingFoo

2

Saya tahu pertanyaan ini benar-benar sudah tua, tetapi ada cara lain untuk melakukannya juga. Coba ini:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>hanya akan membuka 100 baris kosong. Kemudian, kami menjalankan perintah pengganti:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
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.