Bagaimana saya bisa mencegah (atau paling tidak meminta konfirmasi) nomor besar yang tidak masuk akal digunakan untuk awalan perintah?


9

Itu tidak terjadi sesering yang Anda kira, tetapi itu terjadi sesekali, dan saya bahkan tidak memiliki kucing.

Pada dasarnya jika Anda menumbuk baris angka atau numpad dan kemudian menabrak keycombo yang memicu perintah berulang, adalah mungkin untuk secara tidak sengaja memerintahkan Vim untuk melakukan tugas beberapa ribu, juta, atau bahkan miliar kali. Ini dengan mudah keluar dari kendali dan dapat menyebabkan hilangnya data.

Jadi saya bertanya-tanya apakah ada konfigurasi atau sesuatu dalam kode sumber yang dapat kita ubah untuk berfungsi sebagai pemeriksaan kewarasan untuk mencegah DoS semacam ini.


4
Hanya untuk memastikan bahwa saya memahami pertanyaan Anda: Anda secara teratur mengetik secara tidak sengaja beberapa urutan seperti 144477@@atau 99999.dan Anda ingin menghentikan eksekusi ketika jumlahnya terlalu besar? Apakah saya benar? (Saya harus bertanya karena itu agak aneh bagi saya, saya tidak pernah mengalami masalah ini)
statox

3
Mengapa tidak ... memperhatikan apa yang Anda lakukan?
romainl

3
@statox ya, itu benar. romainl juga memiliki poin yang valid, tetapi tampaknya tidak relevan dengan pertanyaan. Pertanyaannya tetap, dan mungkin tidak seserius pertanyaan lainnya, tetapi pertanyaannya tetap. Saya hanya berpikir bahwa masuk akal untuk dapat menentukan batas atas hal ini untuk mencegah penolakan layanan yang tidak disengaja. Adapun saran tentang undolevels, ya itu bisa relevan jika ini meluap membatalkan buffer juga, saya belum mempertimbangkannya juga. (Contoh yang tidak terlalu dibuat-buat - Saya memiliki keyboard 60%, baris batas atas adalah angka. Saya mengambilnya dengan tangan saya. Lupa mencabutnya, dll.)
Steven Lu

4
Anda dapat menggunakan set showcmduntuk menunjukkan kunci yang Anda ketikkan di sudut kanan bawah.
Martin Tournoij

1
@Carpetsmoker Saya pikir itu akan memenuhi syarat sebagai "konfirmasi untuk mengkonfirmasi" karena ditampilkan di layar. Saya sarankan menambahkannya sebagai jawaban (mungkin bersamaan dengan cara menambahkannya sebagai opsi default .vimrc, jadi jawabannya sepenuhnya mandiri.)
Wildcard

Jawaban:


2

Saya menemukan bahwa Anda biasanya dapat mengganggu proses pengulangan dengan mengirimkan SIGINT ( Ctrl+C). Selama beberapa vimscript tidak menjalankan loop dalam yang sangat panjang, tidak ada kekhawatiran DoS.

Lihat di sini untuk contoh plugin yang mungkin berisi fungsi loop tergantung pada nomor yang dimasukkan.

Untuk hampir semua maksud dan tujuan, masalah ini di sini adalah hipotesis.


4
"masalah ini adalah hipotesis" ... Tidak, tidak. Saya harus menggunakan SSH di ponsel saya melalui koneksi 2G, di mana saya secara tidak sengaja melewatkan penekanan tombol atau melakukan beberapa penekanan tombol saat mengetik dalam antisipasi, menghasilkan situasi yang sangat mirip (mungkin bukan 99999, tetapi angka yang lebih kecil ya).
muru

Keren, ya emulator terminal lambat (tergantung pada jumlah perubahan yang diterapkan vim) dapat memperburuk masalah dengan menambahkan penundaan pemrosesan pada sisi klien. Harus mulai Ctrl + C dengan cepat!
Steven Lu

1
Anda hanya bisa menggunakan <Esc>, Anda tidak perlu menggunakan <C-c>. Perbedaannya adalah bahwa <C-c>membatalkan apa pun yang dilakukan Vim (seperti menjalankan fungsi), dan <Esc>tidak melakukannya. Anda hampir tidak pernah ingin menggunakan <C-c>kecuali Anda ingin "membunuh" sesuatu.
Martin Tournoij
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.