¿Cómo puedo evitar (o al menos pedir confirmación) que se usen números absurdamente grandes para prefijar comandos?


9

No sucede tan a menudo como parece, pero sucede ocasionalmente, y ni siquiera tengo un gato.

Básicamente, si combina la fila numérica o el teclado numérico y luego golpea una combinación de teclas que activa un comando repetible, es posible ordenarle inadvertidamente a Vim que realice una tarea varios miles, millones o incluso miles de millones de veces. Esto se descontrola fácilmente y puede provocar la pérdida de datos.

Entonces, me pregunto si hay una configuración o algo en el código fuente que podamos cambiar para que sirva como un control de cordura para evitar este tipo de DoS.


44
Solo para asegurarme de que entiendo su pregunta: ¿escribe regularmente por error alguna secuencia como 144477@@o 99999.y desea detener esas ejecuciones cuando el número es demasiado grande? Estoy en lo cierto? (Tengo que preguntar porque eso me parece un poco extraño, nunca tuve este problema)
statox

3
¿Por qué no ... prestar atención a lo que haces?
romainl

3
@statox sí, eso es correcto. romainl también tiene un punto válido, pero parece irrelevante para la pregunta. La pregunta sigue siendo, y puede que no sea tan "seria" como otras preguntas, pero no obstante es una pregunta. Simplemente creo que tiene sentido poder especificar un límite superior para evitar la denegación accidental de servicio. En cuanto a la sugerencia sobre los niveles de deshacer, sí, eso puede ser relevante si esto también desborda el búfer de deshacer, yo tampoco lo había considerado. (Un ejemplo no tan ingenioso: tengo un teclado del 60%, la fila del borde superior son números. Lo recojo con la mano. Olvida desconectarlo, etc.)
Steven Lu

44
Puede usar set showcmdpara mostrar las teclas que ha escrito en la esquina inferior derecha.
Martin Tournoij

1
@Carpetsmoker Creo que eso calificaría como un "aviso para confirmar", ya que se muestra en la pantalla. Recomiendo agregarlo como respuesta (probablemente junto con cómo agregarlo como una opción predeterminada .vimrc, para que la respuesta sea completamente autónoma)
Comodín

Respuestas:


2

Creo que normalmente puedes interrumpir el proceso de repetición enviando un SIGINT ( Ctrl+C). Mientras algún vimscript no ejecute un bucle interno realmente largo, no hay preocupación DoS.

Vea aquí un ejemplo de un complemento que puede contener una función que se repite dependiendo del número ingresado.

Para casi todos los propósitos, este problema aquí es hipotético.


44
"Este problema es hipotético" ... No, no lo es. Tuve que trabajar en SSH en mi teléfono a través de conexiones 2G, donde accidentalmente perdí una pulsación de tecla o hice varias pulsaciones mientras escribía con anticipación, lo que resultó en situaciones muy similares (tal vez no 99999, pero números más pequeños sí).
muru

Genial, sí, un emulador de terminal lento (dependiendo de la cantidad de cambio que esté aplicando vim) puede exacerbar los problemas al agregar un retraso de procesamiento en el lado del cliente. ¡Tengo que llegar a Ctrl + C rápidamente!
Steven Lu

1
Simplemente puede usar <Esc>, no necesita usar <C-c>. La diferencia es que <C-c>aborta todo lo que Vim está haciendo (como ejecutar una función), y <Esc>no lo hace. Casi nunca quieres usar a <C-c>menos que quieras "matar" algo.
Martin Tournoij
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.