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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.