vi 편집기가 이상하게 닫힙니다

vi 편집기가 이상하게 닫힙니다

편집기를 닫은 후 vi(전체 파일을 로드하지 않고),

-bash-3.2$ vi /var/spool/mail/user1
-bash-3.2$ 0;136;0c

힌트를 남겨주세요 . 콘텐츠가 로드 0;136;0c되지 않거나 무엇이 이런 일을 발생시킬 수 있나요 ?vi

답변1

vim이유를 정확히 말할 수 없는 몇 가지 사항이 있습니다. 먼저, heirloom 을 사용하고 vile있는지 nviheirloom 을 사용하고 있는지 모르겠습니다 vi. 두 번째로 제가 모르는 것은 닫는 방법입니다 vi. 하지만 추측해 보겠습니다.

내가 아는 한, 모든 vi프로그램은 화면에 나타나는 내용을 제어하기 위해 이스케이프 시퀀스를 사용합니다. 즉, 윈도우 시스템 호출을 사용하여 커서 위치를 지정하고 텍스트를 쓰는 대신 viTERM 환경 변수의 값을 사용하여 출력해야 하는 터미널을 찾습니다. TERM 값에 따라 일반적으로 또는 항상 0x1b, ASCII "ESC" 또는 이스케이프 문자로 시작하는 특수 바이트 시퀀스를 보냅니다. 특수 바이트를 "이스케이프 시퀀스"라고 합니다.

과거에는 직렬 터미널 하드웨어가 커서 이동, 텍스트 색상이나 글꼴 변경, 선 그리기, 이러한 이스케이프 시퀀스를 기반으로 다른 문자 세트로 변경 등의 특수 작업을 수행했습니다. vi내가 아는 한, 그들은 여전히 ​​​​사용됩니다. 전체 이스케이프 시퀀스는 C 프로그램에서 사용할 수 있는 "curses" 또는 "ncurses"라는 라이브러리로 추상화되었습니다.

내 생각에는 닫을 때 vi(아마도 control-C 또는 control-backslash를 사용하여) vi일부 이스케이프 시퀀스를 출력하는 중일 것입니다. 당신이 보는 것은 해당 이스케이프 시퀀스의 마지막 몇 바이트입니다. 실제 ASCII "ESC" 바이트는 결코 출력되지 않거나 control-C보다 먼저 출력되고 터미널은 control-C를 이스케이프 시퀀스의 일부로 해석하기 때문에 이렇게 나타납니다. 터미널이 해석한다고 생각하는 이스케이프 시퀀스가 vi​​바이트 시퀀스 출력보다 짧으면 예상되는 이스케이프 시퀀스의 나머지 부분을 볼 수 있습니다.

관련 정보