2012-10-16 2 views
4

터미널에서 vim을 사용하면 기본적으로 터미널 창을 비우고 코딩을 시작할 수있는 새로운 기능을 제공하지만 vim을 종료하면 터미널의 이전 출력이 계속 나열됩니다. 어떻게 터미널을 지워서 프로그램의 출력만을 출력하지만 일단 프로세스가 끝나면 정상 상태로 돌아갑니다. (Linux에서는 fedora)C++ 터미널 창 제어 프로그램

+1

http://rosettacode.org/wiki/Terminal_control/Preserve_screen#C 또는 ncurses를 사용하십시오. –

답변

11

를 사용하여 새 단말기를 호출 할 수 있습니다 생각 하위 레벨에서는 터미널 프로그램에 제어 문자 세트를 보내 사용자가 수행 할 작업을 지시합니다. 수동으로 관리하기에는 너무 복잡 할 수 있습니다.

그래서이 모든 복잡성을 관리 할 수있는 ncurses과 같은 콘솔 라이브러리를 살펴볼 수 있습니다.

프로그램이 종료 된 후에 마술처럼 나타나는 이전 콘텐츠와 관련하여 실제로는 vim이 활용하고 있으며 최신 터미널이 지원하는 xterm 기능입니다. "대체 화면"또는 간단히 "altscreen"이라고합니다. 근본적으로 터미널 프로그램에 "이제는 완전히 새로운 화면으로 전환하면 나중에 다른 화면으로 돌아갈 것입니다."라고 말합니다.

echo -e "\033[?47h" 

을 한 후 다시 전환 :

echo -e "\033[?47l" 

또는 다시 전환하는 명령 재미를 위해 이것을 시도 \E[?47l 동안 다른 화면으로 전환 할 수

명령은 일반적으로 \E[?47h입니다 쉘에서 조금 덜 의존하는 더 완벽한 솔루션을 위해 (이들은 빔이 일반적으로 사용하는 시퀀스 임)

echo -e "\0337\033[?47h" # Save cursor position & switch to alternate screen 
# do whatever 

#Clear alternate screen, switch back to primary, restore cursor 
echo -e "\033[2J\033[?47l\0338" 
+1

여러 가지 이유 때문에 아마도 477이 아니라 1047을 사용하고 싶을 것입니다. 사실 1049를 사용하는 것이 좋습니다. 커서 상태와 화면 상태를 저장/복원하기 때문입니다. – LeoNerd

+0

@LeoNerd 아마도 당신이 작업하고있는 터미널에 가장 적합한 순서를 찾기 위해 termcap을 사용할 것입니다. 그러나 정말로 어디에서 찾을 수 있을지 모르겠습니다. 주제에 대한 추가 정보가 있으면이 답변에 포함시켜 드리겠습니다. – tylerl

+0

잘못 추정합니다. termcap/terminfo는 현대 터미널의 많은 능력을 실제로 따라 잡지 못했습니다. 그들은 마우스, 제목, 8 색 이상의 확장 된 색상에 대해 아무것도 모르고 있습니다. 개인적으로 저는 "모두가 xterm과 같습니다"라는 모델에 대해 작업합니다. 솔직히 말하자면, 모든 터미널에서 일반적으로 xterm과 같은 제어 순서를 받아 들일 수 있기 때문입니다. – LeoNerd

-1

"clear"를 입력하거나 "clear"을 호출하는 시스템 명령을 프로그램에 추가 할 수 있습니다. 또한, 당신이 알지 못한다면, 당신은 vim 내부에서 시스템 명령어를 실행할 수 있기 때문에 종료하지 말고 clear를 입력해야합니다. 당신은 컴파일뿐만 아니라 정력 내부에서 프로그램을 실행 예를 들어, 수 - 또한>

:!clear 
:!make 
:!./programName 

, 나는 결코이 기술을 사용하지,하지만 난 당신이 정력 :set terminal

+0

이 방법은 vim에서 화면을 지우는 방법이 아니라 자신의 프로그램에서 동일한 효과를 얻는 방법을 묻는 것입니다. –