%20%EB%AC%B8%EC%9E%90%EA%B0%80%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%9D%98%20%EB%8B%A4%EC%9D%8C%20%EC%A4%84%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
문제가 발생했습니다. 내 경우에는 일련의 숫자를 인쇄하는 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인쇄 가능한 문자이므로 가능합니다.
추가 자료:
- 포장에 대한 설명이 이상해요. 더 말해주세요.(xterm FAQ)
- 포장의 예(vttest)