如何防止(或至少提示确认)非常大的数字被用作前缀命令?


9

它的发生频率不像您想象的那么频繁,但偶尔会发生,而且我什至没有养猫。

基本上,如果您混搭数字行或数字键盘,然后碰巧触发了可重复命令的键盘,则可能会无意间命令Vim执行数千,百万甚至十亿次的任务。这很容易失控,并可能导致数据丢失。

所以我想知道我们是否可以更改源代码中的配置或内容以进行健全性检查以防止此类DoS。


4
只是为了确保我理解您的问题:您经常错误地键入一些类似144477@@或的序列,99999.并且想要在数字太大时停止执行这些代码?我对吗?(我不得不问,因为这对我来说似乎
有点奇怪

3
为什么不……注意您的工作?
romainl 2015年

3
@statox是的,没错。romainl也有一个正确的观点,但这似乎与问题无关。这个问题仍然存在,它可能不像其他问题那么“严重”,但仍然是一个问题。我只是认为能够指定一个上限以防止意外拒绝服务是有意义的。至于关于撤消级别的建议,是的,如果撤消缓冲区也溢出,那可能是相关的,我也没有考虑过。(一个不那么做作的例子-我有一个60%键盘,上边框行号我把它捡起来用我的手忘了拔下电源插头等。)
史蒂芬鲁

4
您可以set showcmd用来显示您在右下角键入的键。
Martin Tournoij 2015年

1
@Carpetsmoker我认为这会作为“提示确认”的资格,因为它会显示在屏幕上。我建议将其添加为答案(可能连同如何将其添加为中的默认选项一样.vimrc,因此答案完全是独立的。)
Wildcard 2015年

Answers:


2

我发现您通常可以通过发送SIGINT(Ctrl+C)来中断重复过程。只要某些vimscript没有运行很长时间的内循环,就无需担心DoS。

请参阅此处的插件示例,其中可能包含根据输入的数字而循环的功能。

出于几乎所有意图和目的,这里的问题都是假设的。


4
“这个问题是假设的”……不,不是。我必须通过2G连接在手机上使用SSH进行工作,在这种情况下,我在输入预期时意外地错过了击键或进行了多次击键,导致了非常相似的情况(也许不是99999,但数字较小)。
muru

太酷了,是的,一个缓慢的终端仿真器(取决于vim所应用的更改量)可以通过在客户端增加处理延迟来加剧问题。要快速进入Ctrl + C!
史蒂文·卢

1
您可以使用<Esc>,无需使用<C-c>。不同之处在于,<C-c>Vim所做的任何事情(例如运行函数)都会中止,而<Esc>不会。<C-c>除非您想“杀死”某些东西,否则您几乎永远不会使用。
Martin Tournoij 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.