FreeBSD의 vi는 들여쓰기를 취소하기 위해 control-D를 올바르게 실행할 수 없습니까?

FreeBSD의 vi는 들여쓰기를 취소하기 위해 control-D를 올바르게 실행할 수 없습니까?

나는 최소한의 FreeBSD 시스템을 사용하고 있으며 다음을 사용해야 합니다.내장파일을 편집하는 편집기. 특히 이것은 vim, vim-tiny 또는 기타 대안이 아닙니다. 이는 "4BSD 버그 간 호환" nvi 편집기입니다.

거의 예상대로 작동합니다. 이것매뉴얼 페이지control-T와 control-D가 그에 따라 들여쓰기/내어쓰기를 취소함을 나타냅니다 shiftwidth. Control-T는 작동하지만 Control-D는 작동하지 않습니다. 실제로 ^D 문자를 파일에 입력합니다.

vim을 시스템에 설치하면 control-T와 control-D가 예상대로 작동하므로 터미널이 키 입력을 잘못 해석하는 것은 문제가 되지 않습니다. Vi 자체는 control-D를 해석하지 않습니다.

이런 일이 발생한 사람이 있습니까? 해결책? vim을 사용하는 것은 선택 사항이 아닙니다.

답변1

너무 길어요 박사님; vim아니요 vi.

에서는 viTab 대신 Control-T를 사용하여 줄을 들여쓰기해야 합니다.

재학습이 어렵다면 Tab에서 Control-T로 입력 모드 매핑을 추가할 수 있습니다.

printf 'map! \x16\t \x14\n' >> ~/.nexrc

실제 vinvi복제된 것(FreeBSD에서 사용되는 것과 같이)에서는 Ctrl-D가 지워집니다.자동 들여쓰기 문자이전 "shiftwidth" 경계까지. 그럴 것이다아니요Control-I, Tab 또는 Space를 눌러 수동으로 입력한 Tab 또는 Space 문자를 지웁니다.

답변2

이는 버그 간 호환성의 일부입니다.

이에 대해서는 소스 코드의 주석에서 자세히 설명합니다 . 입력은 리터럴 문자 /usr/src/contrib/nvi/vi/v_txt.c로 처리됩니다.~하지 않는 한 ai모드가 켜져 있습니다그리고삽입된 마지막 문자는 자동 들여쓰기 문자입니다( Control+ T또는 새 줄의 자동 들여쓰기를 통해).

또한 주석에서는 원래 vi+ ControlT+ 가 더 제한 Control되어 D삽입 모드에서 처음 입력되는 경우에만 들여쓰기에 영향을 미친다는 점을 지적합니다.

관련 정보