Bagaimana cara mengulang pemetaan ketika tombol terus ditekan

11

Saya memiliki .vimrcbeberapa pemetaan sederhana untuk mengubah ukuran jendela dengan mudah:

noremap <Leader><UP>    <C-w>+
noremap <Leader><DOWN>  <C-w>-

Itu berfungsi cukup baik tetapi misalnya, ketika saya ingin mengubah ukuran jendela 10 baris saya harus menekan dan melepaskan Leader+ UP10 kali.

Bagaimana saya bisa mengulangi pemetaan ini ketika tombol ditekan? Yang saya inginkan adalah ketika saya menekan Leader+ UPpemetaan akan diterapkan satu kali kemudian setelah waktu yang singkat itu akan diterapkan sekali lagi dan seterusnya saat saya memegang kunci.

Catatan: Saya tahu adalah mungkin untuk awalan <C-w>+dengan hitungan dan saya bisa meng-hardcode-nya dalam pemetaan atau hanya memasukkan hitungan sebelum menggunakan pemetaan tetapi bukan itu yang ingin saya lakukan.

Note2: Saya juga tahu bahwa pemetaan populer untuk mengubah ukuran windows adalah dengan menggunakan +dan -tombol yang lebih mudah untuk ditekan beberapa kali tetapi saya tidak ingin menggunakan tombol itu untuk melakukan hal itu.

statox
sumber

Jawaban:

14

Anda dapat mencoba memasukkan ... Vim submode ! Untuk kasus Anda, sesuatu seperti ini:

call submode#enter_with('grow/shrink', 'n', '', '<leader><up>', '<C-w>+')
call submode#enter_with('grow/shrink', 'n', '', '<leader><down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<up>', '<C-w>+')

Ini berarti, Anda memasukkan submode dengan Leader-Upatau Leader-Down(yang juga akan menumbuhkan / mengecilkan jendela sekali) dan kemudian - Anda hanya perlu menekan Upatau Downmenumbuhkan / mengecilkan jendela, sampai Anda keluar dari submode.

Lihat juga bantuan, untuk masalah batas waktu, tetapi, untuk menonaktifkannya:

"disable submode timeouts:
let g:submode_timeout = 0

... yang berarti Anda akan tetap berada dalam submode itu tanpa batas waktu, hingga Anda menekan tombol selain Upatau Down, atau sampai Anda menekan Esc.

Aaand, tip berguna berikut yang saya rekomendasikan:

" don't consume submode-leaving key
let g:submode_keep_leaving_key = 1

... yang memungkinkan Anda untuk pindah langsung ke perintah berikutnya, saat menekan tombol yang berbeda. Misalnya, menekan :keduanya akan meninggalkan submode dan membuka baris perintah.

VanLaser
sumber
Saya mencoba solusi Anda tetapi tampaknya tidak berhasil: Ketika saya menekan <kbd> Leader </kbd> + <kbd> UP </kbd> Saya memiliki pesan --submode: grow/shrink --dan jendela diubah ukurannya oleh satu baris tetapi perintahnya tidak t diulangi. Saya mencobanya dengan 4 kombinasi dari g:submode_keep_leaving_keydan g:submode_timeoutke 0 atau 1. Saya tidak yakin apakah saya melakukan sesuatu yang salah atau tidak. Saya biasanya menggunakan vim di terminal tetapi untuk saat ini saya hanya dapat menguji dengan gVim di windows tapi saya tidak yakin itu mengubah sesuatu.
statox
2
Perintah ini tidak diulangi secara otomatis, Anda masih harus memukul Upatau Downdiri sendiri sebanyak yang diperlukan (tetapi tanpa harus menekan Leaderterlebih dahulu)
VanLaser
Oh, aku mengerti kodenya lebih baik sekarang! Ini bekerja dengan sempurna terima kasih!
statox
2
Jawaban sempurna dan plugin luar biasa! (Catatan: Anda harus menginstal plugin vim-submode sebelum menambahkan perintah di atas ke ~/.vimrc.)
weibeld
1

Dengan winresizer , tekan Ctrl- edan ubah ukurannya!

Anda akan menggunakan tombol hjkl reguler (dan mungkin tombol panah).

Anda dapat "menerima" ukurannya atau "membatalkan" itu.

Ada juga mode pindah tempat Anda bertukar jendela, dan mode fokus tempat Anda mengganti jendela tempat Anda aktif.

D. Ben Knoble
sumber