コマンドのプレフィックスに不条理に大きな数が使用されるのを防ぐ(または少なくとも確認を促す)にはどうすればよいですか?


9

あなたが思うほど頻繁には起こりませんが、たまに起こり、私は猫を飼っていません。

基本的に、数字の行またはテンキーをマッシュしてから、繰り返し可能なコマンドをトリガーするキーコンボをたまたま叩いた場合、誤ってVimに数千回、数百万回、または数十億回もタスクを実行するように命令することができます。これは簡単に制御できなくなり、データが失われる可能性があります。

したがって、ソースコードにこのようなDoSを防止するための健全性チェックとして機能するように変更できる構成または何かがあるかどうか疑問に思います。


4
あなたは定期的に同様に誤っていくつかのシーケンスを入力します。念の私はあなたの質問を理解することを可能にする144477@@99999.、あなたは数が大きすぎるとき、それらの実行を停止するようにしたいですか?私は正しいですか?(私は少し奇妙に思われるので、私は尋ねなければなりません、私はこの問題を持ったことがありませんでした)
スタトックス

3
どうして…あなたがしていることに注意を払いますか?
romainl 2015年

3
@statoxはい、そうです。romainlにも有効なポイントがありますが、それは質問には無関係のようです。問題は残っており、他の問題ほど「深刻」ではないかもしれませんが、それでも問題です。偶発的なサービス拒否を防ぐために、これに上限を指定できるのは理にかなっていると私は単に思います。アンドゥレベルについての提案については、そうです、これがアンドゥバッファもオーバーフローする場合に関連する可能性があるので、私もそれを考慮していませんでした。(それほど不自然な例ではありません-私は60%キーボードを持っています。一番上のボーダー行は数字です。私は手でそれを拾います。それを抜くことを忘れてください。など)
Steven Lu

4
を使用set showcmdして、入力したキーを右下隅に表示できます。
Martin Tournoij、2015年

1
@Carpetsmoker画面に表示されるので、「確認を求めるプロンプト」と見なされます。私はそれを回答として追加することをお勧めします(おそらくでデフォルトオプションとして追加する方法と一緒に.vimrc、回答は完全に自己完結型です。)
ワイルドカード

回答:


2

通常、SIGINT(Ctrl+C)を送信することにより、繰り返し処理を中断することができます。一部のvimscriptが非常に長い内部ループを実行していない限り、DoSの問題はありません。

入力した数値に応じてループする関数がプラグインに含まれる例については、こちらをご覧ください。

ほとんどすべての意図と目的のために、この問題はここで架空のものです。


4
「この問題は架空の問題です」...いいえ、そうではありません。2G接続を介して電話でSSHを使用する必要があり、予期して入力中に誤ってキーストロークを入力しなかったり、複数のキーストロークを行ったりしたため、非常によく似た状況になりました(99999ではないかもしれませんが、数値は小さいです)。
muru

(vimが適用している変更の量に応じて)遅いターミナルエミュレーターは、クライアント側で処理遅延を追加することによって問題を悪化させる可能性があります。すぐにCtrl + Cを取得する必要があります。
Steven Lu

1
そのまま使用でき<Esc>ます<C-c>。使用する必要はありません。違いは、<C-c>Vimが実行している処理(関数の実行など)をすべて中止し、中止<Esc>しないことです。<C-c>何かを「殺したい」場合を除いて、あなたはほとんど使いたくないでしょう。
Martin Tournoij、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.