Jak mogę zapobiec (lub przynajmniej poprosić o potwierdzenie) absurdalnie dużych liczb przed użyciem prefiksów poleceń?

9

Nie zdarza się tak często, jak się wydaje, ale zdarza się czasami, a ja nawet nie mam kota.

Zasadniczo, jeśli zacierasz wiersz liczb lub klawisze numeryczne, a następnie trafisz na keycombo, które uruchamia powtarzalne polecenie, możliwe jest niezamierzone polecenie Vimowi wykonania zadania kilka tysięcy, milionów, a nawet miliardów razy. To łatwo wymyka się spod kontroli i może spowodować utratę danych.

Zastanawiam się więc, czy w kodzie źródłowym jest jakaś konfiguracja, czy coś, co możemy zmienić, aby służyło jako kontrola poprawności, aby zapobiec tego rodzaju DoS.

Steven Lu
źródło
4
Tylko dla pewności, że rozumiem twoje pytanie: regularnie wpisujesz przez pomyłkę jakąś sekwencję, taką jak 144477@@lub 99999.i chcesz zatrzymać te egzekucje, gdy liczba jest zbyt duża? Czy mam rację? (Muszę zapytać, ponieważ wydaje mi się to trochę dziwne, nigdy nie miałem tego problemu)
statox
3
Dlaczego nie… zwracać uwagę na to, co robisz?
romainl
3
@statox tak, zgadza się. Romainl ma również rację, ale wydaje się, że pytanie to nie ma znaczenia. Pytanie pozostaje, i może nie być tak „poważne” jak inne pytania, ale mimo wszystko jest pytaniem. Po prostu uważam, że sensowne jest określenie górnej granicy, aby zapobiec przypadkowemu odmowie usługi. Jeśli chodzi o sugestię dotyczącą niedopoziomowania, tak, może to być istotne, jeśli to przepełnia również bufor cofania, ja też nie rozważałem tego. (Nie tak wymyślony przykład - mam klawiaturę 60%, górny rząd granicy to cyfry. Podnoszę go ręką. Zapomnij o odłączeniu go. Itp.)
Steven Lu
4
Możesz użyć, set showcmdaby wyświetlić klawisze wpisane w prawym dolnym rogu.
Martin Tournoij
1
@Carpetsmoker Myślę, że kwalifikuje się to jako „monit o potwierdzenie”, ponieważ pojawia się na ekranie. Polecam dodanie go jako odpowiedzi (prawdopodobnie wraz ze sposobem dodania go jako opcji domyślnej .vimrc, więc odpowiedź jest w pełni samowystarczalna.)
Wildcard,

Odpowiedzi:

2

Uważam, że zwykle możesz przerwać proces powtarzania, wysyłając SIGINT ( Ctrl+C). Tak długo, jak jakiś vimscript nie ma naprawdę długiej pętli wewnętrznej, nie ma obaw przed DoS.

Zobacz tutaj przykład wtyczki, która może zawierać funkcję, która zapętla się w zależności od wprowadzonego numeru.

Dla prawie wszystkich intencji i celów ta kwestia jest tutaj hipotetyczna.

Steven Lu
źródło
4
„ten problem jest hipotetyczny”… Nie, nie jest. Musiałem pracować na SSH na telefonie przez połączenia 2G, gdzie przypadkowo nie trafiłem klawisza lub wykonałem wiele klawiszy podczas pisania w oczekiwaniu, co skutkuje bardzo podobnymi sytuacjami (może nie 99999, ale mniejsze liczby tak).
muru
Fajnie, tak, powolny emulator terminala (w zależności od ilości zmian jakie stosuje vim) może zaostrzyć problemy poprzez dodanie opóźnienia przetwarzania po stronie klienta. Muszę szybko dostać się do Ctrl + C!
Steven Lu
1
Możesz po prostu użyć <Esc>, nie musisz używać <C-c>. Różnica polega na tym, że <C-c>przerywa wszystko, co robi Vim (np. Uruchamianie funkcji), a <Esc>nie robi tego. Prawie nigdy nie chcesz używać, <C-c>chyba że chcesz coś „zabić”.
Martin Tournoij