Як я можу не допустити (або принаймні швидкого підтвердження) абсурдно великої кількості від використання префіксальних команд?


9

Це трапляється не так часто, як ви думаєте, але це трапляється зрідка, і я навіть не маю кота.

В основному, якщо ви замішуєте рядок чисел або numpad, а потім трапляєтеся на клавішу комбінації, яка запускає повторювану команду, можна ненавмисно командувати Vim виконати завдання в кілька тисяч, мільйонів чи навіть мільярдів разів. Це легко виходить з-під контролю та може призвести до втрати даних.

Тож мені цікаво, чи є у вихідному коді конфігурація чи щось, що ми можемо змінити, щоб служити перевіркою правильності для запобігання подібного типу DoS.


4
Просто щоб бути впевненим, що я розумію ваше запитання: ви регулярно помилково вводите якусь послідовність на кшталт 144477@@або, 99999.і хочете зупинити ці страти, коли кількість занадто велика? Чи правий я? (Я повинен запитати, тому що це здається мені трохи дивним, я ніколи не мав цієї проблеми)
statox

3
Чому б не ... звернути увагу на те, що ти робиш?
romainl

3
@statox так, це правильно. Romainl теж має вагомий пункт, але це видається неважливим для питання. Питання залишається, і воно може бути не таким "серйозним", як інші питання, але все-таки питання. Я просто думаю, що є сенс мати можливість вказати верхню межу для цього, щоб запобігти випадковому відмові у наданні послуги. Щодо пропозиції щодо скасування рівнів, так, це може бути актуально, якщо і цей переповнює буфер скасування, я також не розглядав це. (Не настільки надуманий приклад - у мене клавіатура 60%, верхній рядок - це цифри. Я підбираю її рукою. Забудьте відключити її від мережі. І т. Д.)
Стівен Лу,

4
Ви можете використовувати set showcmdдля відображення введених вами клавіш у правому нижньому куті.
Мартін Турноїй

1
@Carpetsmoker Я думаю, що це буде кваліфіковано як "швидке підтвердження", оскільки воно відображається на екрані. Я рекомендую додати його як відповідь (напевно, поряд із тим, як додати його як параметр за замовчуванням у .vimrc, щоб відповідь була повністю самостійною.)
Wildcard

Відповіді:


2

Я вважаю, що зазвичай ви можете перервати процес повторення, надіславши SIGINT ( Ctrl+C). Поки якийсь вимскрипт не виконує дійсно довгий внутрішній цикл, проблем щодо DoS немає.

Дивіться тут приклад плагіна, може містити функцію, яка циклічно залежить від введеного числа.

Практично для всіх намірів і цілей це питання є гіпотетичним.


4
"це питання є гіпотетичним" ... Ні, це не так. Мені довелося працювати над SSH на своєму телефоні над 2G-з'єднаннями, де я випадково пропустив натискання клавіші або зробив кілька натискань клавіш під час набору в очікуванні, внаслідок чого виникали дуже схожі ситуації (можливо, не 99999, але менші числа так).
муру

Холодно, так повільний термінальний емулятор (залежно від кількості змін, які застосовує vim) може посилити проблеми, додавши затримку обробки на стороні клієнта. Треба швидко дістатися до Ctrl + C!
Стівен Лу

1
Ви можете просто використовувати <Esc>, не потрібно використовувати <C-c>. Різниця полягає в тому, що <C-c>перериває все, що робить Vim (наприклад, виконуючи функцію), а <Esc>ні. Ви майже ніколи не хочете користуватися, <C-c>якщо не хочете щось "вбити".
Мартін Турноїй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.