
我工作中有一台伺服器使用 csh 作為預設 shell。我更喜歡 bash,所以每當我登入時,我都會啟動bash
.
但由於某種原因,退格按鈕會刪除完整的單字,而不僅僅是刪除字元。這是為什麼?我如何更改此設定並讓 Bksp 逐一刪除字元?
僅供參考,Shift+Bksp 逐個字元刪除。如果可以的話,我想讓 Shift+Bksp 逐字刪除。只要可能的話。
謝謝
PS:請不要告訴我按住shift鍵;這真是太煩人了。
答案1
有些終端發送^h
(字符號8)作為BackSpace密鑰,有些終端發送^?
(字元符號127)。可以配置許多終端模擬器,大多數程式都可以配置為知道需要哪個鍵。顯然,雙方必須達成協議。
stty 是應用程式查詢終端配置的一種方式。erase = ^?
意味著你的伺服器上的終端描述檔聲稱,當你的終端發送 時^?
,它的意思是「刪除前一個字元」。werase = ^?
意思^?
是「刪除前一個單字」。這兩個設定之間存在矛盾。
當您透過 ssh 登入時,ssh 用戶端會傳送終端名稱,該名稱會放入TERM
環境變數中。然後,伺服器上的程式在資料庫(稱為 termcap 或 terminfo)中尋找終端的描述。如果這些描述被破壞,或者某個設定檔(例如/etc/profile
或~/.login
或~/.bashrc
)用錯誤的資料覆蓋了描述,您可能會發現不符。例如,問題的一個可能根源是,當您的終端發送退格鍵時,某些初始化檔案是否包含命令stty werase '^?'
(強制^?
刪除單字) 。^?
理想情況下,您應該解決衝突,因為許多程式都會讀取此資訊。
在 Putty 中,您可以設定要發送哪個^?
鍵。檢查此設定的值。也許解決問題的最簡單方法是讓 Putty 發送,並確保伺服器使用該設定(放入,將強制它)。^h
BackSpace^h
BackSpacestty erase '^h'
~/.bashrc