쉘 명령을 통해 터미널에서 스크롤 백을 어떻게 재설정합니까?


40

Terminal.app를 사용하는 경우 셸 내장을 사용 clear하거나 ^+ L(Control-L)를 눌러 화면을 지울 수 있습니다 .

그러나이 모든 것은 현재 화면 내용을 한 화면 높이 뒤로 밀고 첫 번째 줄에서 커서 / 입력을 재설정하는 것입니다. 다시 스크롤하여 볼 수 있음을 의미합니다.

당신이 할 수있는 일은 + K(Command-K)를 눌러 전체 스크롤 백을 재설정하는 것 입니다.

이 작업을 수행 한 후에는 전혀 뒤로 스크롤 할 수 없습니다.

특정 상황 (특히 실행하기 전에 screen또는 vim)에서 명령이 실제로 실행되기 전에 스크롤을 다시 설정하고 싶습니다.

clearOS X에서 구현 되는 명령 (예 :)이 있습니까? 의 존재를 감안 pbcopy하고 pbpaste, 나는 나이 작업을 수행 할 수 있도록 뭔가 비슷한 힘의 존재를 생각하고 있어요.


터미널 사용 명령에서 Chris Pages의 답변에서 알 수 있듯이 clear && printf '\e[3J' (정답으로 잘못된 답변을 선택했습니다!)
Cyborg

답변:


57

터미널은 ED (Erase in Display) 이스케이프 시퀀스 확장을 지원하여 스크롤 백을 지 웁니다. xterm에서도 지원됩니다. VT100 매뉴얼에 설명 된 ED 명령 은 Ps 매개 변수에 다음 값을 허용합니다.

ESC [Ps J

매개 변수 매개 변수 의미

0 활성 위치에서 화면 끝까지 지우기
1 화면 시작에서 활성 위치로 삭제
2 모든 디스플레이 지우기

터미널 ( 및 xterm )은 다음을 추가합니다.

3 스크롤 백 지우기 (일명“저장된 줄”)

이렇게하면 화면이 아니라 스크롤 백만 지워집니다. 이를 통해 두 개의 이스케이프 시퀀스를 전송하여 둘 중 하나를 지울 수 있습니다.

예를 들어 다음 쉘 명령을 사용하여 화면과 스크롤을 지울 수 있습니다. clear && printf '\e[3J'

(이 clear명령은 현재 터미널의 화면을 지우는 데 적합한 순서를 찾지 만 "스크롤 백 지우기"이스케이프 시퀀스는 사용자 지정이며 하드 코딩해야합니다.이 스크립트를 모르는 쉘 스크립트에 넣으면 일부는 오직 터미널 실행됩니다를 들어, 당신은 확인해야 $TERM_PROGRAM입니다 Apple_Terminal전송하기 전에.)


4
이것은 osascript보다 훨씬 빠릅니다!
Sergei

3
이것은 훨씬 더 나은 대답입니다. 따라서 이것을 영구적으로 만들려면 ~ / .bash_profile에 추가하십시오. alias clear="clear && printf '\e[3J'"
Tom

1
이 스크립트를 PATH에 넣었습니다.echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
Walker Hale IV

2
@WalkerHaleIV 왜 이스케이프 시퀀스를 stdout에 인쇄하는 대신 실행 파일을 작성합니까?
Chris Page

1
$ TERM_APPLICATION은 $ TERM_PROGRAM이어야합니다
pbatey

30

⌘K, '보기> 스크롤 백 지우기'바로 가기

업데이트 : 다음 명령으로 AppleScript를 사용하여 자동화 할 수 있습니다.

osascript -e 'tell application "System Events" to keystroke "k" using command down'

... 물론 alias원하는대로 또는 ~/.profile로그인 스크립트에 함수에 저장할 수 있습니다 :)

보안 상, 잘못된 프론트 앱에 키 스트로크를 발생시킬 위험없이 백그라운드에서이 기능을 사용할 수 있으려면 다음 테스트로이를 둘러 보는 것이 좋습니다.

if application "Terminal" is frontmost

… 다음 코드를 제공합니다.

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

… 차례로, 제대로 탈출하고 aliased :

alias clear="osascript -e 'if application \"Terminal\" is frontmost then tell application \"System Events\" to keystroke \"k\" using command down'"

그리고 여기 새로운 것이 있습니다 clear! :)


여기서 요점은 쉘 환경에서 무언가를 설정하여 명령 (예 vim:)을 실행할 때 쉘이 vim을 실행하기 전에 "스크롤 백 재설정"을 실행하도록하는 것입니다. 대화식이 아닌 프로그래밍 방식.
Jason Salaz

1
@JasonSalaz Ok, 그것을 얻지 못했습니다. 죄송합니다. 이에 대한 코드를 추가했습니다.
MattiSG

1
이 답변이 문제를 해결 한 경우 @JasonSalaz입니다. 확인해야합니다. 그렇지 않은 경우 의견을 보내주십시오. :) 기억하십시오 . 미래의 사용자 가 감사 할 것입니다.)
MattiSG

그 만화는 나에 관한 것입니다. 나는 덴버, CO에서 프로그램을 (이 있다면 아니, 정말로, 그것은 비록 미친 것.).
제이슨 Salaz

이것은 나를 위해 작동하지 않습니다. 내가 알 수있는 한, 그것은 입력과 같습니다 clear. 즉, 화면이 지워지지 만 여전히 뒤로 스크롤 할 수 있습니다. 타격 Command K은 정상적으로 작동합니다.
Zev Eisenberg

7

다음은 macOS 'Terminal 및 iTerm2 모두에서 작동하는 코드입니다. 창을 전경에 둘 필요도 없습니다.

printf '\033[2J\033[3J\033[1;1H'

작동 원리

이것은 3 개의 ANSI 이스케이프 시퀀스 , 특히 "Control Sequence Introducer"명령으로 구성 됩니다.

\033은 나타내는 문자의 코드 포인트를 하드 코드하는 이스케이프 시퀀스입니다. 리딩 0은 나머지 시퀀스가 ​​8 진수 값 (이 경우 8 진수)을 인코딩 함을 나타냅니다 33. 그 10 진수 값은 27( 3 * 8^1 + 3 * 8^0= 3 * 8 + 3= 24 + 3= 27)입니다. ASCII에서 코드 포인트 27는 "ESC"(이스케이프) 문자입니다.

CSI명령은 ESC [, aka로 시작 \033[합니다. 이것을 알면 문자열을 3 부분으로 나눌 수 있습니다.

  1. CSI 2 J
    • "ED – Erase in Display"명령의 인스턴스이며 다음과 같은 형식입니다. CSI n J
    • 이 경우 n값이 설정되어 2두 번째 변형을 호출합니다. "n이 2 인 경우 전체 화면을 지우고 커서를 DOS ANSI.SYS에서 왼쪽 위로 이동합니다."
  2. CSI 3 J:
    • "ED – Erase in Display"명령의 인스턴스이며 다음과 같은 형식입니다. CSI n J
    • 이 경우 n값이 3으로 설정되어 3"n이 3이면 전체 화면을 지우고 스크롤 백 버퍼에 저장된 모든 행을 삭제합니다 (이 기능은 xterm 용으로 추가되었으며 다른 터미널 응용 프로그램에서 지원됨").
  3. CSI 1 ; 1 H:
    • "ED – Erase in Display"명령의 인스턴스이며 다음과 같은 형식입니다. CSI n ; m H

      커서를 행 n, 열로 이동합니다 m. 값은 1을 기준으로하며 생략하면 기본값은 1 (왼쪽 상단)입니다. CSI 17H와 CSI ;5H동의어 CSI 1;5H일뿐만 아니라 같은 시퀀스CSI 17;HCSI 17;1H

    • nm값으로 설정되어 1이 명령 움직이면 왼쪽 상단의 코너에 커서를 말한다.

어디서 구할 수 있는지 물어봐도 될까요? 내 +
1-

1
기억 나지 않지만 다음과 같은 구성입니다. en.wikipedia.org/wiki/ANSI_escape_code
Alexander-Monica Monica

1
" CSI n J"(여기서 n = 2) + " CSI n J"(여기서 n = 3) + " CSI n ; m H"(여기서 n, m = 1, 1) 인 것으로 보입니다 . "ED-Erase in Display"(변형 2), "ED-디스플레이에서 지우기"(변형 3), "CUP-커서 위치"(1, 1로 이동)
Alexander-Monica Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.