왜 귀찮게?
스크롤백 버퍼를 지우는 것은 여러 면에서 편리합니다. 예를 들어 긴 출력으로 일부 명령을 실행하고 해당 출력의 시작 부분으로 빠르게 스크롤하려는 경우입니다. 스크롤백 버퍼가 지워지면 맨 위로 스크롤하면 완료됩니다.
몇 가지 참고사항:
clear
사람에게는 명령이 있는데,
분명한가능하다면 스크롤백 버퍼를 포함하여 화면을 지웁니다(확장된 "E3" 기능이 정의된 경우).
그놈 터미널 clear
에서아니요스크롤백 버퍼를 지웁니다. (근데 "E3" 기능이 뭔가요?)
또한 reset
, 그것은 지워지지만 그 이상을 수행하고 매우 느립니다(내 시스템에서는 1초 이상 걸리며 이는 인간에게는 눈에 띄는 지연입니다).
echo -ne '\ec'
또는 echo -ne '\033c'
일을 할 수 있는 것도 있습니다 . 그리고 실제로 훨씬 더 빠릅니다 reset
.
문제는 \ec
시퀀스가 무엇인지, 무엇을 clear
하는지 reset
, 그리고 왜 별도의 명령이 없는지입니다.
C-l
기본적으로 명령 에 바인딩되는 readline 의 키 시퀀스도 있습니다 clear-screen
(즉, 쉘 명령이 아니라 readline 명령을 의미합니다). 이 명령은 무엇입니까? 어떤 이스케이프 시퀀스를 내보내나요? 실제로 어떻게 작동하나요? 쉘 명령을 실행합니까? 또는 무엇을? 마찬가지로 gnome-terminal에서는 터미널 맨 윗줄에 프롬프트가 나타날 때까지 빈 줄을 뱉어내는 것만으로도 작동하는 것 같습니다. 다른 터미널 에뮬레이터에 대해서는 잘 모르겠습니다. 이것은 매우 귀찮은 행동입니다. 큰 공백 덩어리로 스크롤백을 오염시키므로 점점 더 위로 스크롤해야 합니다. 이것은 깨끗한 솔루션이 아니라 해킹처럼 느껴집니다.
또 다른 질문은 위의 시퀀스에 대한 readline 명령이 있습니까 \ec
? 묶고 싶은데 C-l
왜냐면언제나화면을 지울 때 스크롤백 버퍼를 지우고 싶습니다.
또 다른 질문은 어떻게그냥 입력하세요원하는 작업을 수행하기 위해 터미널에 이러한 이스케이프 시퀀스가 필요합니까? 그러면 다른 readline 명령에 바인딩하는 것에 대해 생각할 필요가 없습니다 C-l
(해당 명령이 존재하는 경우). 입력 Esc
을 시도했지만 c
작동하지 않습니다.
고쳐 쓰다 이 질문에 대한 답변은 주로 다음과 같습니다.https://unix.stackexchange.com/a/375784/257159. 이것은 여기에 묻는 거의 모든 질문을 설명하는 매우 좋은 답변입니다.
답변1
~에서man bash
읽는 줄 부분:
clear-display (M-C-l)
Clear the screen and, if possible, the terminal's scrollback buffer, then redraw the current line, leaving the
current line at the top of the screen.
clear-screen (C-l)
Clear the screen, then redraw the current line, leaving the current line at the top of the screen. With an argu‐
ment, refresh the current line without clearing the screen.
Ctrl + Alt + L을 누르세요.
답변2
많은 터미널 에뮬레이터가 동일한 이스케이프 시퀀스를 사용합니다.X텀, 또는 유사합니다. XTerm의 경우 Escc"RIS(완전 재설정)"로 정의됩니다. 전체 재설정을 수행하면 스크롤백 버퍼가 지워지는 것이 합리적입니다.
readline
시퀀스 자체에 대한 바인딩을 사용하여 성공하지 못했지만 해결 방법은 다음과 같습니다.
bind '"\C-l": "\C-a\C-kprintf\ "\\033c"\C-m"'
이에 대한 몇 가지 주의 사항이 있습니다. 첫째, printf
명령을 쉘 기록에 넣는데 이는 이상적이지 않습니다. 둘째, 명령을 입력할 때 사용할 수 없습니다. 현재 입력 줄을 덮어쓰게 됩니다.
답변3
이것은 나에게 효과적입니다.
printf '\033[3J'
( clear
맨 페이지에서)
답변4
"https://invisible-island.net/ncurses/terminfo.ti.html#tic-xterm-basic"의 일부(참고 "\E는 이스케이프(\033) 문자를 나타냅니다." 및 E3=\E[3J
)
#### VT100/ANSI/ECMA-48
#
# ANSI Standard (X3.64) Control Sequences for Video Terminals and Peripherals
# and ECMA-48 Control Functions for Coded Character Sets.
#
# Much of the content of this comment is adapted from a table prepared by
# Richard Shuford, based on a 1984 Byte article. Terminfo correspondences,
# discussion of some terminfo-related issues, and updates to capture ECMA-48
# have been added. Control functions described in ECMA-48 only are tagged
# with * after their names.
#
# The table is a complete list of the defined ANSI X3.64/ECMA-48 control
# sequences. In the main table, \E stands for an escape (\033) character,
# SPC for space. Pn stands for a single numeric parameter to be inserted
# in decimal ASCII. Ps stands for a list of such parameters separated by
# semicolons. Parameter meanings for most parameterized sequences are
# described in the notes.
#
# Sequence Sequence Parameter or
# Mnemonic Name Sequence Value Mode terminfo
# -----------------------------------------------------------------------------
# APC Applicatn Program Command \E _ - Delim -
# BEL Bell * ^G - - bel
# BPH Break Permitted Here * \E B - * -
# BS BackSpace * ^H - EF -
# CAN Cancel * ^X - - - (A)
# CBT Cursor Backward Tab \E [ Pn Z 1 eF cbt
# CCH Cancel Previous Character \E T - - -
# CHA Cursor Horizntal Absolute \E [ Pn G 1 eF hpa (B)
# CHT Cursor Horizontal Tab \E [ Pn I 1 eF tab (C)
# CMD Coding Method Delimiter * \E
# CNL Cursor Next Line \E [ Pn E 1 eF nel (D)
# CPL Cursor Preceding Line \E [ Pn F 1 eF -
# CPR Cursor Position Report \E [ Pn ; Pn R 1, 1 - - (E)
# CSI Control Sequence Intro \E [ - Intro -
# CTC Cursor Tabulation Control \E [ Ps W 0 eF - (F)
# CUB Cursor Backward \E [ Pn D 1 eF cub
# CUD Cursor Down \E [ Pn B 1 eF cud
# CUF Cursor Forward \E [ Pn C 1 eF cuf
# CUP Cursor Position \E [ Pn ; Pn H 1, 1 eF cup (G)
# CUU Cursor Up \E [ Pn A 1 eF cuu
[1]: https://i.stack.imgur.com/IE2gD.png