我知道使用cmd + K可以清除整个屏幕缓冲区。 我想知道有没有办法清除屏幕缓冲区的一半?
答案 0 :(得分:0)
cmd + K 映射到菜单项以清除可见屏幕(屏幕缓冲区)。这不包括回滚(这是一个类似的问题,但不同)。
iTerm2的首选项和菜单没有显示任何直接方式来清除屏幕的一半。
然而,iTerm2仿效(如Terminal.app)大多数VT100控制序列。您可以在shell中添加一个绑定(给定一个合适的键),告诉shell回显一个控制序列,该序列从当前光标位置(a)清除到屏幕开头或(b)结束屏幕。由于它尊重保存/恢复光标控件,如果你知道尺寸,你甚至可以清楚地清楚屏幕的一半,例如,
因为它会使用你的shell,所以我称之为 indirect 。
如上所述,Terminal.app实现了VT100控制序列的大多数。在ncurses中,适当的TERM
将是nsterm
,已知它可以提供VT100样式的保存/恢复光标。您可以使用tput
从终端数据库中提取sc
,rc
和cup
的相应字符串。但是(如果你想要擦除屏幕的开头),你会提供自己的字符串,因为那个特殊的味道不是termcap / terminfo的一部分。
您可以在 XTerm Control Sequences 中找到相关的VT100控制序列:
ESC 7 Save Cursor (DECSC).
ESC 8 Restore Cursor (DECRC).
CSI Ps ; Ps H
Cursor Position [row;column] (default = [1,1]) (CUP).
CSI Ps J Erase in Display (ED).
Ps = 0 -> Erase Below (default).
Ps = 1 -> Erase Above.
Ps = 2 -> Erase All.
Ps = 3 -> Erase Saved Lines (xterm).
答案 1 :(得分:0)
引用answer
# Get ceiling eg: 7/2 = 4
ceiling_divide() {
ceiling_result=$((($1+$2-1)/$2))
}
clear_rows() {
POS=$1
# Insert Empty Rows to push & preserve the content of screen
for i in {1..$((LINES-POS-1))}; echo
# Move to POS, after clearing content from POS to end of screen
tput cup $((POS-1)) 0
}
# Clear quarter
alias ptop='ceiling_divide $LINES 4; clear_rows $ceiling_result'
# Clear half
alias pmid='ceiling_divide $LINES 2; clear_rows $ceiling_result'
# Clear 3/4th
alias pdown='ceiling_divide $((3*LINES)) 4; clear_rows $ceiling_result'