답변:
이 동작은 일부 (하드웨어) 터미널과 대부분의 (소프트웨어) 터미널 에뮬레이터에 포함 된 "대체 화면"기능에서 비롯됩니다. 어떤 터미널 인식 프로그램은 작업을 수행하기 위해 대체 '화면'으로 전환하고 종료 될 때 (종료, 일시 중단 등) 일반 '화면'으로 다시 전환됩니다. 이것은 그러한 프로그램의 최종 결과물을 효과적으로 제거합니다.
"terminfo prevent altscreen"에 대한 웹 검색 은 대체 화면 '문제'와 몇 가지 솔루션을 설명하는 페이지를 제공 했습니다 .
링크 된 페이지에서 설명한 것처럼 일부 프로그램은 대체 화면을 사용하지 않도록 구성 할 수 있습니다. -X
에 대한 옵션 이하 이 일을 간접적 인 방법입니다. t_ti
및 t_te
변수를 설정 해제하여 Vim을 유사하게 구성 할 수 있습니다 .
더 넓은 범위의 솔루션 은 대체 화면 제어 순서가 포함되지 않도록 터미널 의 terminfo 항목 을 편집 하는 것입니다. terminfo 항목은 특정 효과 (커서 이동, 화면 지우기, 현재 행의 일부 지우기 등)를 생성하기 위해 터미널에 전송할 시퀀스를 제어하는 프로그램을 알려주는 데이터베이스를 구성합니다. 터미널에서 사용하는 terminfo 항목을 편집하면 "alternate screen"제어 시퀀스도 존재한다는 것을 모든 terminfo 사용 프로그램에 '말하지 않도록'설정할 수 있습니다.
에서 의 제어 시퀀스 목록 의 xterm , 우리는 (에 대한 관심의 제어 시퀀스 것을 알 수 있습니다 xterm이 터미널 에뮬레이터 -like)이 있습니다
ESC [ ? 47 h
(1047 및 1049와 동일)ESC [ ? 47 l
(1047 및 1049와 동일).이러한 코드는 terminfo 변수 smcup
및 에있을 가능성이 높습니다 rmcup
. 현재 TERM에 대해 이러한 변수를 소비하는 빠르고 더러운 방법은 다음과 같습니다.
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
이 방법은 매우 조잡하며 모든 터미널에서 작동하지는 않지만 대부분의 xterm 유사 터미널 에뮬레이터에서는 작동합니다. 터미널에 대한 terminfo 항목의 변수 smcup
및 rmcup
변수 값을 조사 하고 원하지 않는 동작을 방지하기 위해 보수적으로 편집해야합니다. 위에 링크 된 토론 / 솔루션 페이지에는 자신을 해킹하는 대신 사용할 수있는 "사전 조리 된"terminfo 파일이 있습니다 (그러나 그 재미는 무엇입니까?).
당신은 설정해야합니다 $MANPAGER
으로 /usr/bin/less -isX
경로 교체, less
필요에 따라 발견된다. 중요한 부분은 -X
; 는 -is
less로 전달 된 기본 세트입니다.
호출기가가 있다고 가정하면 less
환경 변수 LESS
를 "X"를 포함하도록 설정하십시오 . 예를 들어 광산은 다음과 같습니다.
LESS="-iMFXRj4a"
~/.bashrc
파일 에서 이것을 설정할 수 있습니다
export LESS="-X"
alrady에있는 다른 옵션을 포함 시키거나 원하는 옵션을 추가하십시오.
다른 답변보다 우아하지 않은 또 다른 트릭은 다음과 같습니다.
man what | more
(적어도 이것은 MacOS X에서 작동하며 일반적으로 유효 할 정도로 유사합니다.)