Vim 화면에서: 들여쓰기 표시가 올바르지 않습니다.

Vim 화면에서: 들여쓰기 표시가 올바르지 않습니다.

vim을 사용하여 Unix 화면 외부에서 파일을 편집하면 vim이 파일을 올바르게 표시합니다. 그러나 유닉스 화면에서 동일한 파일을 열면 들여쓰기가 "엉망"된 것처럼 보입니다.

들여쓰기가 실제로 정확하기 때문에 "~인 것 같다"고 말합니다(두 번째 이미지에서 강조 표시된 커서가 보이면 실제로는 올바른 줄의 시작 부분에 있습니다).

여기서 무엇이 잘못되었을 수 있습니까?

편집: 내 파일뿐만 아니라 vim 메시지도 엉망으로 보입니다. 여기에 이미지 설명을 입력하세요. 가능한 모든 것을 시도하고 화면 코드의 CRLF 코드도 변경했지만 이 문제를 제거할 수 없습니다. 마침내 tmux로 전환했는데 효과가 꽤 좋았습니다.

외부 화면: 외부 화면

내부 화면: 내부 스크린

답변1

사진은 이런 특징을 보여주는 것 같아요피복재:

  • 색상(아마도)
  • 커서 주소 지정(무엇커서를 올바른 위치로 이동하세요)
  • 탭(알 수 없음: 터미널이 하드웨어 탭을 지원한다고 주장하지만 전혀 지원하지 않는 경우 두 번째 줄은 왼쪽 여백에서 시작됩니다)

그러나 두 번째 줄에 문제가 있습니다. Vim은 중괄호에서 바로 아래로 커서를 이동하고(개행 문자 사용) 캐리지 리턴/라인피드를 얻을 수 있습니다. 이것이 이 공간을 설명할 수 있습니다. vim은 이러한 유형의 최적화를 수행합니다.screen.c:

    else if (plan == PLAN_NL)
    {
        if (noinvcurs)
        screen_stop_highlight();
        while (screen_cur_row < row)
        {
        out_char('\n');
        ++screen_cur_row;
        }
        screen_cur_col = 0;
    }

당신의stty설정은 다음과 같습니다 onlcr.

 onlcr (-onlcr)
             Map (do not map) NL to CR-NL on output.

이는 정상적인 종료인 것으로 보입니다. 설정 중 하나가 sttyvim(또는 screen)을 망칠 수 있으므로 결과는 다음과 같습니다.

예를 들어, 빠른 확인에서 나는 이것을 했습니다(리터럴 탭 사용).

$ stty ocrnl
$ cat >foo
$ cat >foo <<EOF
if(a) {
        /*then b */
}
EOF
$ vim foo

그리고 이것을 보았습니다(vim이 설정으로 인해 혼동될 수 있다는 증거ocrnl):

if(a) {
        /*then b */

                   }

하지만 (vim을 종료하고) 그리고

$ stty -ocrnl
$ vim foo

프로그램

if(a) {
        /*then b */
}

가치 있는 일이라면 vi-like-emacs가 이 경우에 옳은 일을 합니다.

관련 정보