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.
이는 정상적인 종료인 것으로 보입니다. 설정 중 하나가 stty
vim(또는 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가 이 경우에 옳은 일을 합니다.