VS Code的Remote Development擴充功能,現在是否已成為伺服器端工程師的「必備工具」呢?透過SSH就像在本地一樣撰寫程式碼、啟用補全、進行除錯。似乎已經沒有理由再回到終端機了。
然而,在我的開發環境中,screen(或tmux)仍然活躍不已。
為什麼在令和時代還堅持使用這種四分之個世紀前的工具?這並不僅僅是懷舊,而是因為「工作的持續性」和「上下文的保存」,是現代開發環境中無法替代的價值。
本文將介紹為何在VS Code全盛期的今天,我們仍然想要重新評估持續使用Screen/Tmux的三個理由。
VS Code的Remote Development(SSH)能讓遠端環境如同本地般無縫運作。然而,這種「舒適感」是建立在穩定的網路和客戶端PC存活的脆弱平衡之上。
當咖啡店的Wi-Fi突然不穩,或是在移動中進入隧道VPN斷線時,VS Code畫面上出現的「正在重新連接」提示。當然,VS Code也很優秀,通常在許多情況下會恢復,但是以下情況下是否有過驚慌的經歷?
如果連接完全中斷,那該怎麼辦?那個過程將成為「迷失(孤兒)」,失去檢查輸出結果的手段,或可能會凍結導致異常終止。
在這裡,screen和tmux的真正價值得以顯現。這些工具管理伺服器端的「會話」。
我們透過SSH連接,啟動screen並開始工作,就像在伺服器中借用「自用的虛擬工作室」一樣。
| 行動 | 說明 |
|---|---|
| Detach(分離) | 網路斷線或故意關閉SSH。這就像是「關上房門離開」,房間內的燈(過程)還是亮著,工作仍在進行。 |
| Attach(附加) | 再次透過SSH登入,敲入指令。當你打開門的那一瞬間,剛才在運行的程式將如同原樣出現在你面前。 |
VS Code是「用戶端操作伺服器」的工具,而Screen/Tmux則是「在伺服器端永續保存自身工作環境」的工具。
獲得這種「會話的永續性」後,工程師的心理安全感將顯著提升。因為有相信「萬一連線中斷,伺服器端的過程仍然會持續存活」的確信,所以我們能在網路不穩定的地方也能心無旁騖地執行長時間且有風險的任務。

(來源:An Introduction to Terminal Multiplexing with GNU Screen)
工程師的工作不僅僅是撰寫程式碼,還包括確認日誌、反覆嘗試資料庫查詢、監控伺服器行為。在調查或開發的過程中,我們的終端機成為了「思考的地圖」。
雖然VS Code的整合終端機也可以進行畫面分割,但一旦關閉窗口或切換專案,想要完全重現當時的分割狀態、執行的指令歷史及當前目錄情況,實際上非常麻煩。
使用Tmux,可以將以下的「風景」作為上下文完整保存(Screen也有split指令,但對我來說使用不便所以不會使用)。
| 窗格 | 角色 |
|---|---|
| 左半邊 | 持續監控錯誤日誌(tail -f) |
| 右上小窗 | 監控資源狀況(top或htop) |
| 右下主區域 | 執行試驗中的腳本 |
這種配置是針對當時調查優化的「思考駕駛室」。中斷工作並分離的意義在於,這駕駛室的開關仍然保持開啟狀態,而時間卻被凍結。
最能體會這種恩惠的,便是在幾天後重新開始工作的瞬間。
在星期五晚上「今天到此為止」分離後回家,星期一早晨再附加進來。這時,數天前所鬥爭的畫面配置、執行的指令輸出、調查過程將無變化地出現在眼前。
「嗯,我到哪裡了?」這種回憶的時間便不再需要。附加的瞬間,大腦記憶中會載入當時的上下文,且能立即投入到工作的「繼續」中。這種將思考的切換成本降低到接近零的體驗,正是Screen/Tmux所提供的真正生產力,VS Code單獨無法達到。
此外,Screen/Tmux內的「窗口切換」比起切換編輯器的標籤要輕量得多。可以在伺服器內保留如「開發用會話」「運行監控用會話」等多個上下文,只需一個鍵盤快捷鍵便能輕鬆切換,甚至無需伸手去碰鼠標。
無論VS Code如何進化,工程師進入的所有環境並不都具備「最新的便利性」。事實上,在實務上的重要時刻,多數情況下環境會受到許多限制。
金融類專案或擁有嚴格安全政策的生產環境; 或者是需透過多層SSH才能到達的「踏板伺服器(Bastion)」。在這些環境中,甚至連安裝VS Code Remote Development的伺服器端組件都可能被禁止。
當你被拋入這樣一個「裸 Linux 終端」時,screen 或 tmux 實際上成為最後的防線。
在這些環境下,並不需要安裝繁複的插件。僅需將數行設定文件(.screenrc或.tmux.conf)放入家目錄,即可在狀態欄顯示時間與窗口清單,讓任何多麼簡陋的伺服器瞬間變成「自己的工作場所」。
# --- .screenrc 最小構成範例 ---
# 將Escape鍵改為Ctrl-z(可按喜好設定)
escape ^z^z
# 狀態列(在畫面底部顯示窗口清單和時鐘)
hardstatus alwayslastline "%{= bw} %-w%{= rk} %n %t %{-}%+w %= [%H] %y/%m/%d %c"
# 增加滾動緩衝區
defscrollback 10000
# 啟動時不顯示訊息
startup_message off
在受到外部工具攜帶限制的環境中,僅用OS的標準功能便能實現畫面分割、會話保存和日誌記錄的Screen/Tmux,不僅僅是個便捷工具,更是基礎設施和運營者的必備裝備。
不該抱怨「無法使用VS Code而不方便」,而是應該感到自信,因為「無論何種環境都能讓自己達到最強狀態」。這便是持續使用這些工具的其中一個理由。
「成熟技術」之所以成為成熟,有其原因。
無論像VS Code這樣的現代編輯器如何進化,從事伺服器端的工作,我們無法逃避網路及連接的不確定性。在那不確定的世界裡,Screen或Tmux用「會話」這一武器來應對,至今仍然是現役且必須的工具。
如果你還未體驗過「黑色畫面」的會話管理,那麼請務必從今天開始導入。
一旦體驗到昨天所分離的畫面,今日依然如故地迎接你的快感,你將再也無法回到「普通終端」的日子。