我有一個如下所示的兩行提示。是否有像clear
這樣的命令將清除屏幕,但保持這兩個行提示可見?用兩行提示清除終端屏幕並保持兩行可見
~/current/directory git-branch*
$ echo 'hello...
我有一個如下所示的兩行提示。是否有像clear
這樣的命令將清除屏幕,但保持這兩個行提示可見?用兩行提示清除終端屏幕並保持兩行可見
~/current/directory git-branch*
$ echo 'hello...
短:不,沒有這樣的命令。
長:你可能寫一個腳本。這裏是對該主題的簡要介紹。
clear
程序清除整個屏幕。你的shell會繪製一個新的提示(在新清除的屏幕的頂部)。但是,假設你想在命令完成之前清除屏幕上的部分,並返回到shell。
,您將使用支持從當前光標位置清除屏幕,這是terminfo capability ed
結束的ANSI轉義序列最終端:
clr_eos ed cd clear to end of
screen (P*)
所示infocmp
爲ed=\E[J
。
你可以用它在腳本中,例如,使用tput
:
tput ed
這是 「ANSI.SYS」 從ANSI標準不同的地區之一(實際上ECMA-48,看到8.3.29 ERASE IN PAGE
) 。 ansi.sys
清除整個屏幕,當它接收
printf '\033]J'
有些人硬編碼到腳本這一點,並假設「ANSI.SYS」的標準相匹配。例如參見ncurses FAQ中的How do I get color with VT100?。
注意到關於如何測試的評論:可能在提示下面的屏幕上沒有任何內容。因此,輸入tput ed
可能看起來什麼都不做。如上所述,它在下清除光標。如果你想清除(2線)上方的提示,這是一個更復雜一點:
如果您提示恰好是在屏幕的第一線,這可以使用光標位置報告檢測。但是,這要比措辭所預期的問題更復雜。假設上面還有空間:
tput sc
tput cuu 2
tput cub 999
printf '\033[1J'
tput rc
定期printf
而非tput
用在這裏,因爲有該類型的擦除的定義沒有預定義的terminfo(或termcap中)的能力。
如果您想處理提示在終端頂部行開始的情況,您必須找到當前行number並決定是否執行上面的清除(或不清除)。
延伸閱讀:
也不''輸入ed'或'printf'\ 033] J''正在'konsole'中工作。 – 2016-08-04 11:00:57
'tput ed'和'printf'\ 033] J''都沒有在st(吮吸終端)中工作。這兩個命令都會返回。在xterm中,'printf'\ 033] J''掛起。 – Joe
我不希望它能夠工作,因爲那是**'OSC J' **而不是**'CSI J' **。 xterm按預期處理它。從這一點開始,關於konsole和tput的評論需要一些澄清(konsole作品也如預期的那樣......)。 –
清除保持多提示... – 123
哦,你是對的。我正在使用C-l,它沒有那種相同的行爲。我認爲他們是一樣的。 – Joe