遠端伺服器上 vim/nano 中的 SSH 亂碼字元
……這讓我發瘋了。
基本上(這在過去的幾個月裡一直在發生),我從我的電腦上登錄了幾個不同的 CentOS 伺服器(一個 Linode、另一個 VPS 和一個我可以訪問 shell 的共享主機),執行 5.5、5.7 和 6。 Mac 執行 OS X Lion,使用終端。
基本上:
$ ssh username@example.com [remote-host] $ nano somefile.txt
一旦我開始編輯文件,如果我使用箭頭鍵移動游標,或者開始刪除,然後再次輸入,游標會跳動一點,如果我保存文件並重新打開它,很明顯游標是,事實上,無緣無故地在一條線上到處亂跳。
我最終得到諸如“這是一個新文本”之類的東西。當我(對著瘋狂的游標編輯器)輸入“這是一行文字”時。
在編輯配置文件時這是一個大問題,因為我經常必須編輯一行,保存並關閉,然後重新打開以確保該行正確……然後再編輯另一行……這變得很煩人.
我發現Linode Lish Shell Vim 和 Nano 渲染問題:沒有出現的行/游標位置錯誤,但我不知道這是否有很大關係,因為那是專門指 lish。
[**更新:**從 Mac OS X Mountain Lion 10.8 開始,終端支持 Backtab 轉義序列,消除了這個問題。]
這些伺服器上的 nano 版本有時會在將游標向左移動一個字元時發送 Backtab (ESC [ Z) 序列,但終端不支持此序列,因此 nano 認為游標已經移動了t 及其關於游標目前位置的想法與終端不同步。
由於我無法理解的原因,nano 在向左移動時會發送一個 Backtab,並且游標是製表位右側的一個字元。同樣,IIRC,它在向右移動時發送一個製表符(Control-I),並且游標是製表位左側的一個字元。我不知道為什麼它在製表位周圍這樣做,而不是總是使用相同的字元序列向左/向右移動。Mac OS X Lion 10.7 附帶的 nano 版本不這樣做。
Nano 僅在 terminfo 表示支持該
cbt
功能時才執行此操作。Terminal 的預設 terminfo 是xterm-256color
,它聲明了此功能並將其映射到 Backtab 序列。一種解決方法是將TERM
環境變數設置為不聲明此功能的內容。您可以在呼叫之前在本地機器上執行此操作,也可以ssh
在遠端主機上的 shell 啟動文件中執行此操作。將其設置為xterm-color
將在緊要關頭,但不建議這樣做,因為它會禁用其他重要行為(例如 256 色、BCE、備用螢幕內容保存)。(更重量級的方法是自定義遠端主機上的xterm-256color
(或xterm
)terminfo 文件以刪除cbt
.)建議自定義遠端主機(一種或另一種方式),因此自定義不適用於本地或其他遠端主機,但最簡單的解決方法是將終端首選項設置更改為使用
xterm-color
而不是xterm-256color
:終端 > 首選項 > 設置 >$$ profile $$> 高級 > 將終端聲明為:
我建議複製現有的設置配置文件,對其進行自定義並僅在連接到這些遠端主機時使用它。