명령 접두어에 터무니없이 많은 숫자가 사용되는 것을 어떻게 방지 할 수 있습니까?


9

생각만큼 자주 발생하지는 않지만 가끔 발생하며 고양이를 소유하지도 않습니다.

기본적으로 숫자 행이나 숫자 키패드를 으깬 다음 반복 가능한 명령을 트리거하는 키 조합을 누르면 실수로 Vim에 수천, 백만 또는 수십억 번 작업을 수행하도록 명령 할 수 있습니다. 이것은 쉽게 제어 할 수 없게되어 데이터가 손실 될 수 있습니다.

소스 코드에 구성이나 무언가가 있는지 궁금해서 이런 종류의 DoS를 방지하기 위해 온 전성 검사 기능을 수행 할 수 있습니다.


4
내가 당신의 질문을 이해하고 있는지 확인하기 위해 : 당신은 실수로 실수로 몇 가지 시퀀스를 입력 144477@@하거나 99999.숫자가 너무 클 때 그 실행을 멈추고 싶습니까? 내가 맞아? (그것이 나에게 조금 이상해 보이기 때문에 물어봐야한다. 나는이 문제를 본 적이 없다.)
statox

3
왜… 당신이하는 일에주의를 기울입니까?
romainl

3
@statox 예, 그렇습니다. romainl도 유효한 요점을 가지고 있지만 질문과 관련이없는 것 같습니다. 그 질문은 여전히 ​​남아 있으며, 다른 질문들처럼 "심각한"것은 아니지만 질문입니다. 우연히 서비스 거부를 막기 위해 이에 대한 상한을 지정할 수 있다고 생각합니다. 언 레벨에 대한 제안에 관해서는, 언두 버퍼에 오버플로가 발생하면 관련이 될 수 있습니다. (그렇게 고안되지 않은 예-60 % 키보드, 상단 테두리 행은 숫자입니다. 손으로 가져옵니다. 플러그를 뽑는 등을 잊어 버리십시오.)
Steven Lu

4
set showcmd오른쪽 하단에 입력 한 키를 표시하는 데 사용할 수 있습니다 .
Martin Tournoij 2016 년

1
@Carpetsmoker 화면에 표시되기 때문에 "확인하라는 프롬프트"라고 생각합니다. 답변으로 추가하는 것이 좋습니다 (의 기본 옵션으로 추가하는 방법과 함께 .vimrc답변이 완전히 포함되어 있습니다.)
Wildcard

답변:


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 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.