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


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.