Apakah ada cara pengulangan karakter saat dalam mode insert Vim? Sebagai contoh, katakan saya ingin memasukkan 80 tanda hubung, dalam sesuatu seperti emacs saya akan mengetik:
Ctrl+U 8 0 -
Satu-satunya cara saya tahu bagaimana melakukannya di VIM adalah keluar dari mode normal untuk argumen repeat, kemudian kembali ke mode insert untuk mengetikkan dash, kemudian keluar untuk memasukkan strip yang sebenarnya, DAN kemudian kembali ke mode insert untuk melanjutkan mengetik. Urutannya sangat panjang:
Esc 8 0 a - Esc a
Alangkah baiknya untuk tidak masuk dan keluar dari mode.
<C-o>
adalah singkatan untukCtrl
+o
.:normal
perintah yang memungkinkan Anda mengeluarkannya dari command prompt. Sesekali cukup bermanfaat.Escnic Esc Esc.
Misalnya Esc4iJEsc Escakan menampilkan
JJJJ
.sumber
sumber
Melalui pengulangan tunggal:
Lebih detail tentang pengulangan tunggal:
:help .
sumber
Anda juga bisa melakukannya, Escnihello there EscEsc
di mana, n adalah jumlah pengulangan.
misalnya, Esc5ihello there EscEsc
sumber
Esc
dua kali sesudahnya. Terima kasih @prashantAda banyak cara lain tetapi AFAIK yang Anda gambarkan adalah yang terpendek. Dalam vim Anda sebagian besar seharusnya menghabiskan waktu Anda dalam mode perintah, sehingga hanya akan menjadi 3 penekanan tombol + jumlah pengulangan (80-).
Namun, jika Anda sering menggunakan hal yang berulang ini, Anda bisa menjadikan diri Anda fungsi atau makro untuk tujuan itu; mungkin sesuatu seperti:
sumber
Anda bilang akan 'menyenangkan' untuk tetap dalam mode 'Sisipkan', namun dalam Mode Perintah metode berikut ini akan menghindari ke-2 Anda ESC: -
Meskipun saya tahu posting ini sudah tua, sepertinya sayang untuk melewatkan opsi 'Potong / Salin dan Tempel' yang jelas ...
x ...memotong
80 ...jumlah salinan
p Tempel
Catatan: Ini mirip dengan metode yang disarankan oleh Martin Beckett, namun saya mendapatkan penundaan saat mengeluarkan perintah itu, mungkin karena ia mengganti mode beberapa kali, perintah ini dijalankan secara instan.
sumber
v
y
untuk masuk ke mode visual, lalu menarik, lalu80
p
menempelkannya 80 kali. Apakah saya melewatkan sesuatu, atau apakah Anda lupa langkah?Jawaban terlambat tetapi untuk apa nilainya, jika Anda ingin mengirimnya dengan spam, Anda dapat menggunakan perintah "repeat last command":
.
i"Frase" Esc -
i to insert, enter phrase/character, esc to go normal mode
. -
Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command).
Saya menemukan ini sangat berguna ketika saya tidak tahu persis berapa banyak pengulangan yang ingin saya lakukan, tetapi tahu secara visual berapa lama saya inginkan. Pada dasarnya ledakan
.
sampai mataku puas.sumber
Saya terkejut belum ada yang menyarankan ini:
Dalam mode Sisipkan, gunakan
<C-r>=repeat('-', 80)<CR>
Itu adalah:
repeat('-', 80)
Berfungsi untuk mengulang karakter apa saja beberapa kali.
Ini menggunakan lebih banyak penekanan tombol daripada jawaban @ romainl, tetapi tidak meninggalkan mode Sisipkan sama sekali.
sumber
Selain fungsi menulis yang akan mengulangi teks beberapa kali, Anda dapat menggunakan <C-x><C-l>: jika Anda sudah memiliki garis yang berisi 80 tanda hubung, menulis beberapa tanda hubung di awal baris baru dan kemudian menekan <C-x><C-l>akan menyelesaikan garis yang dimulai dengan beberapa tanda hubung yang akan mungkin garis itu dengan 80 garis. Saya biasa menulis garis horizontal (78 tanda hubung) dalam file bantuan sedemikian rupa.
sumber
Untuk tugas semudah
abbreviation
itu, lakukan triknya. Tambahkan berikut ini ke.vimrc
dan mulai sekarang, ketika Anda mengetik
--
diikuti oleh spasi (saat Anda dalam mode memasukkan), itu--
akan secara otomatis dikonversi ke-
80 kali.Dengan menggunakan fungsi ini
repeat
Anda dapat mengulangi string sebanyak yang Anda inginkan.Perhatikan bahwa Anda dapat mengujinya sebelum memperbarui
.vimrc
dengan masuk kecommand
mode lalu mengeluarkan yang berikut ini:iab <expr> -- repeat('-', 80)
sumber
Saya melakukan ini tanpa keluar dari mode INSERT menggunakan langkah-langkah di bawah ini.
-- (insert) VISUAL --
mode)i
-
Ctrl+o
v
y
Ctrl+o
80
p
Ini akan mencetak semua strip secara horizontal dalam satu baris.
sumber