Comment empêcher (ou du moins inviter à confirmer) des nombres absurdement grands d'être utilisés pour préfixer des commandes?

9

Cela n'arrive pas aussi souvent que vous le pensez, mais cela arrive de temps en temps, et je n'ai même pas de chat.

Fondamentalement, si vous écrasez la ligne numérique ou le pavé numérique, puis que vous frappez un clavier qui déclenche une commande reproductible, il est possible de commander par inadvertance à Vim d'exécuter une tâche plusieurs milliers, millions, voire milliards de fois. Cela devient facilement hors de contrôle et peut entraîner une perte de données.

Je me demande donc s'il y a une configuration ou quelque chose dans le code source que nous pouvons changer pour servir de vérification de santé mentale pour empêcher ce genre de DoS.

Steven Lu
la source
4
Juste pour être sûr que je comprends votre question: vous tapez régulièrement par erreur une séquence comme 144477@@ou 99999.et vous voulez arrêter ces exécutions lorsque le nombre est trop grand? Ai-je raison? (Je dois demander car cela me semble un peu bizarre, je n'ai jamais eu ce problème)
statox
3
Pourquoi pas… faites attention à ce que vous faites?
romainl
3
@statox oui, c'est vrai. romainl a également un argument valable, mais il ne semble pas pertinent pour la question. La question demeure, et elle n'est peut-être pas aussi «sérieuse» que d'autres questions, mais c'est néanmoins une question. Je pense simplement qu'il est logique de pouvoir spécifier une limite supérieure à ce sujet pour éviter un déni de service accidentel. En ce qui concerne la suggestion concernant les niveaux inférieurs, oui, cela peut être pertinent si cela déborde également du tampon d'annulation, je ne l'avais pas non plus envisagée. (Un exemple pas si artificiel - J'ai un clavier à 60%, la rangée de bordure supérieure est des chiffres. Je le prends avec ma main. Oubliez de le débrancher. Etc.)
Steven Lu
4
Vous pouvez utiliser set showcmdpour afficher les touches que vous avez tapées dans le coin inférieur droit.
Martin Tournoij
1
@Carpetsmoker Je pense que cela serait considéré comme une "invite à confirmer" car il apparaît à l'écran. Je recommande de l'ajouter comme réponse (probablement avec la façon de l'ajouter comme option par défaut dans .vimrc, donc la réponse est entièrement autonome.)
Wildcard

Réponses:

2

Je trouve que vous pouvez généralement interrompre le processus de répétition en envoyant un SIGINT ( Ctrl+C). Tant que certains vimscript n'exécutent pas une boucle interne très longue, il n'y a pas de problème DoS.

Voir ici pour un exemple de plugin qui peut contenir une fonction qui boucle en fonction du nombre entré.

À presque toutes fins utiles, cette question est ici hypothétique.

Steven Lu
la source
4
"ce problème est hypothétique" ... Non, ce n'est pas le cas. J'ai dû travailler sur SSH sur mon téléphone via des connexions 2G, où j'ai accidentellement manqué une frappe ou effectué plusieurs frappes en tapant par anticipation, ce qui a donné lieu à des situations très similaires (peut-être pas 99999, mais des nombres plus petits oui).
muru
Cool, oui, un émulateur de terminal lent (en fonction de la quantité de changements appliqués par vim) peut exacerber les problèmes en ajoutant un délai de traitement côté client. Je dois accéder rapidement à Ctrl + C!
Steven Lu
1
Vous pouvez simplement utiliser <Esc>, vous n'avez pas besoin d'utiliser <C-c>. La différence est que cela <C-c>annule tout ce que Vim fait (comme exécuter une fonction) et <Esc>ne le fait pas. Vous ne voulez presque jamais l'utiliser à <C-c>moins de vouloir "tuer" quelque chose.
Martin Tournoij