마지막 탭 작성기(탭) 문자가 터미널의 다음 줄로 이동하지 않습니다.

마지막 탭 작성기(탭) 문자가 터미널의 다음 줄로 이동하지 않습니다.

문제가 발생했습니다. 내 경우에는 일련의 숫자를 인쇄하는 Lua 프로그램이었습니다. Lua는 탭을 구분 기호로 사용하며 80열 터미널에서 출력은 다음과 같이 나왔습니다.

1       2       3       4       5       6       7       8       9       10      1
1      12

숫자 11이 어떻게 잘리는지 확인하세요. 첫 번째 1은 열 79에 있고 두 번째 1은 다음 행의 열 0에 있습니다. 나는 대신 다음 줄에 완전한 숫자 11이 나타날 것으로 예상했습니다.

이는 Lua에만 국한된 것이 아니며 다음 한 줄로 쉽게 재현할 수 있습니다.

printf '1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12'

나는 이 질문과 허용된 답변을 읽었습니다.80열 콘솔에 탭스톱이 11개 있는 이유는 무엇입니까?그게 나를 이해하게 해줬어그런 일이 일어나고 있습니다. 문제는 마지막 탭을 현재 줄의 마지막 열이 아닌 다음 줄의 열 0으로 이동하도록 해당 동작을 재정의하는 방법이 있습니까?

답변1

아니요, 이 작업을 자동으로 수행할 수는 없습니다. 즉, 프로그램의 출력을 필터링하여 오른쪽 여백의 탭을 줄 바꿈으로 해석하지 않고는 할 수 없습니다. 그 이유는 VT100 스타일 포장이 오른쪽 여백까지 올라가서~ 아니다당신이 쓰지 않는 한 포장인쇄 가능성격. 탭은 인쇄할 수 없습니다.

대부분의 터미널은 소프트 탭(이미 공백으로 확장됨)을 사용하도록 설정되어 있습니다. stty설정을 확인하여 이것이 사실인지 확인할 수 있습니다 . 출력은 모호하지만 tab0탭을 사용하려고 시도하지만 탭을 tab3사용하지 않는다는 의미입니다.

설정을 보려면:

stty -a

하드 탭을 비활성화하려면:

stty -tabs

루아5월해당 설정을 무시하지만 그렇지 않은 경우 space인쇄 가능한 문자이므로 가능합니다.

추가 자료:

관련 정보