2013-07-25 238 views
15

當我在終端工作時,我看到最後一個shell命令執行輸出的歷史。如果我運行vim,我會看到全屏打開的文件。當我退出vim時,我可以再次看到最後一個shell命令的歷史記錄。屏幕:如何打開備用屏幕?

但是,當我從屏幕使用vim。我看到了我剛從vim退出時編輯的文件的佔用空間,而不是最後一個shell命令的歷史記錄。 雖然我想看看shell的歷史。

我該如何做到這一點?

我使用:

  • terminal.app和iterm2.app
  • 嘗試切換到的xterm的xterm-256color(在iterm2.app)
  • 檢查和取消選中「保存線回溯時的(在iterm2中)
  • 添加termcapinfo xterm ti @:te @ to .screenrc(雖然它應該是對相反問題的解決方案,但爲什麼不能試試)
  • sshing到Linux機器,並試圖使用gnu屏幕那裏

到目前爲止,我沒有得到所需的行爲。

P.S.

我用Google搜索了一下,看到的人的意見誰試圖解決相反的問題:

Many of you probably know the annoying behaviour of console-based programs like less or vi restoring the screen after exiting so that the text you just had there vanishes.

這種行爲背後的主要思想是程序是否使用備用屏幕,以節省殼歷史圖片並在vim退出時顯示它。因此,如果一個人想解決的問題正好相反,他應該

exorce the evil alternate screen

回答

18

更新:我已經忘記了禁用默認交替屏支持的screen功能。

altscreen on添加到您的$HOME/.screenrc以啓用它。這可能是所有你必須做的;所有與$TERM,$TERMCAP$TERMINFO有關的混亂可能是不必要的。無論如何,我會在這裏留下這個答案的其餘部分。

我已經在我自己的.screenrc這個這麼長時間,它滑了我的腦海。

要啓用此功能在當前會話中,鍵入其次:altscreen onscreen轉義字符(CNTRL-A默認)輸入

沒有這個,screen將不會響應轉義序列,即使它們是在terminfo或termcap中定義的。


vim(和less,和其他大多數基於光標的全屏幕程序)使用由終端的terminfo項中定義的smcuprmcup字符串。 (這些在舊的termcap系統中分別被稱爲tite)。 smcup切換到備用屏幕,rmcup切換回主屏幕。

如果你的terminfo項沒有這些字符串,程序將無法做到這一點。

屏幕命令,默認情況下,設置您$TERM"screen"。顯然,「screen」terminfo條目沒有smcuprmcup

如果您覺得黑客要使用terminfo條目,您可以修改「screen」的現有信息以添加smcuprmcup。您需要使用infocmp命令將terminfo轉換爲文本,並使用tic將其轉換回由terminfo使用的二進制格式。

一個更簡單的解決方案是將您的$TERM環境變量設置爲調用screen命令之前的任何值。現在幾乎所有終端仿真器都基於舊的DEC VT100,所以它們應該足夠兼容。

在我的系統,例如,當我登錄我TERM=xterm;這可能是MacOS上的其他功能。在一個screen會話,默認情況下,我想有:

$ echo $TERM 
screen 

我可以將其更改爲xterm這樣的:

$ export TERM=xterm 

(同樣,取代 「xterm的」 以任何$TERM是您的系統上。)

您還可以添加

term xterm 

到你的$HOME/.screenrc。事實上,screen有多個選項可用於調整termcap/terminfo設置; man screen並搜索「terminfo」以獲取血腥詳細信息。

+0

謝謝!在'$ HOME/.screenrc'和'Ctl + A' - >':altscreen on'中的'altscreen on'是我的工作。 – chown