螢幕 - 退出 Vim 後的奇怪行為
我的配置螢幕遇到問題。
我
screen.rc
的很簡單,看起來像這樣:altscreen on termcapinfo xterm ti@:te@
我想將螢幕配置為具有與直接使用 SSH 客戶端(如
MobaXterm
. 所以我想要實現的是:
- 可以使用滑鼠滾動
vim
(不使用 set mousea
)- 用滑鼠滾動終端輸出(不帶
Ctrl
+A
Esc
)- 退出
vim
和其他編輯器等後,我想查看我以前的命令,而不是vim
輸出,也沒有我的螢幕被清除。配置
.vimrc
(和類似的本地配置文件)也是不可能的,因為我正在使用螢幕連接到許多機器並且我無法.vimrc
在所有機器上進行修改。我發現實現這一切是不可能的。因此,通過我的這兩行,我
.screenrc
可以滾動終端輸出,但vim
我必須使用鍵盤 - 好的。所以,直奔問題。
當我關閉時,
vim
我得到了一個非常奇怪的行為。控制台的輸出就像打開之前一樣,vim
所以這就是我想要的。但是提示位於視窗頂部,而不是在我的最後一個命令(正在執行vim
)之後。所以我寫在一些以前的輸出之上。我希望你明白。你知道如何解決嗎?任何幫助,將不勝感激。
我不知道這是否有意義,但是
MobaXterm
當我配置了螢幕時,我正在使用連接到虛擬機。也許它也與SSH有關,誰知道。編輯:我也嘗試了另一個 ssh 客戶端
Putty
,它是一樣的
原來問題是由一條愚蠢的線路引起的
.bashrc
TERM=xterm; export $TERM
所以在執行 screen 之後它有
TERM=xterm
而不是TERM=screen
. 刪除此行後,問題消失了。
描述的症狀來自
rc
(恢復游標)轉義序列。仔細想想,問題的根源可能是vim:
使用給定
.screenrc
的 ,screen
程序模擬 xterm 備用螢幕功能。這是使用 terminfo
smcup
和rmcup
(termcapti
和te
) 控制序列完成的當切換到備用螢幕時,xterm (a) 保存游標位置,(b) 清除備用螢幕,(c) 顯示備用螢幕。
當從備用螢幕切換時,xterm (a) 恢復正常螢幕的游標位置並 (b) 顯示正常螢幕。
這些操作是在單個控制序列中完成的,而不是分開的。在終端描述中,您可能(infocmp 輸出)看到一個
1049
.該
screen
程序模擬這些操作。但是,與xterm 不同的是,它不使用單個變數來保存/恢復游標位置:快速檢查表明,如果
- 我保存游標位置(用
tput sc
),- 切換到/從備用螢幕(
tput smcup
- 後跟
tput rmcup
),最後- 恢復游標位置(
tput rc
),- 然後游標轉到保存的位置
tput sc
。vim – 和 vim 的外掛 – 可以發送轉義序列。似乎在 vim 退出期間的某些東西正在發送轉義序列以恢復游標。在這裡快速檢查一下,vim 表現正常(但配置和版本不同)。所以我會檢查外掛。
如果我正在調試這種情況,我會擷取發送到螢幕的字元(
script
例如使用)並查找最常用的序列rc
:
escape``7
escape``[``u
如果
screen
更接近地匹配 xterm 的行為會很好,但最終似乎存在vim
發送意外保存/恢復游標序列的問題。相關閱讀: