我花在終端機視窗上的時間比以往任何時候都多,這是我在 90 年代初期絕對無法想像的。當時,可憐的 MS-DOS 是業界無聊的代名詞,至少在消費市場上,像 Windows 這樣的圖形介面(甚至還有像 AmigaOS 這樣更奇特的系統)似乎注定要把命令列推向滅亡,讓我們所有人都進入 ooey-GUI 的未來。

事實證明,命令列仍然是某些工作的最佳工具——事實上是許多工作。幾年前我讀到一篇很有見地的文章(可能是在 Slashdot 上),認為滑鼠驅動的點擊介面基本上就是把使用者簡化為在螢幕上指著某樣東西,然後對電腦咕噥一聲:「做!做那個!」(右鍵上下文選單的出現讓使用者也能咕噥「更多東西!」但並沒有增加詞彙量)。

相比之下,命令列讓使用者有機會用文字精確地告訴電腦他們想要做什麼,而不是用一兩個電腦必須根據上下文解釋的整體概念。

說出來可能有點傻,但正是命令列在 2007 年把我從 Windows 日常使用中解放出來。當時,我在工作中被迫經常使用 bash,因為我接管了波音休士頓當時全新的 EMC Celerra NSX 企業級 NAS 設備的日常管理。雖然有可用的 GUI 管理選項(說出「EMC Control Center」這幾個字可能會觸發一小部分資深讀者的創傷),但我繼承的環境完全依賴 bash 腳本。

起初,我對 Linux 的一切嗤之以鼻,但就像《最後生還者》中的真菌一樣,Shell 的觸手慢慢侵蝕了我的大腦。我開始意識到,可悲的舊 cmd.exe 和 MS-DOS 批次檔確實很糟糕,也許,也許我那位憤怒的灰髮系統管理員導師的 Linux 言論並沒有那麼瘋狂。

我沒想到自己會像他那樣只運行手動編譯的 Slackware——事實上,20 年後我仍然遠未達到那種程度——但他說的有道理。我在工作中使用的類 Unix Shell 越多,我就越開始想念家裡的它。Windows Vista 及其早期的 WDDM 問題,讓我的兩張 Nvidia 7900GT 顯卡(SLI 配置)的強大主機變成了一個卡頓、噴 BSOD 的爛攤子,而微軟作業系統的未來看起來一片黯淡——Windows 7 要過幾年才會出現來改變這種狀況。

對 bash Shell 的暴露療法把我推到了臨界點,我跳槽到了 Macintosh 陣營。這是一個經過計算的舉動,旨在讓我獲得所有可能的世界——一個良好的圖形介面,同時在底層擁有我工作中依賴的同一個 bash Shell。

我再也沒有回頭。如今,我在家裡運行三個不同的作業系統。macOS 仍然是我桌上型電腦的日常驅動程式;Windows 則放在角落的遊戲 PC 上;而 Linux(Ubuntu Server LTS 版本)則無頭地放在衣櫃裡,這就是它的歸宿。上帝在他的天堂裡,我的計算世界一切安好——而且,自 2007 年初以來,我每天仍然花一兩個小時使用終端機視窗,以老派、文字化的方式處理事務。

Fish Shell 早已成為我在 Mac 上的預設 Shell,很大程度上是因為我喜歡 Fish 的顏色,並發現它們很有幫助(別評判我!)。然而,當我登入 Linux 時,我仍然堅持使用老舊的 bash。我知道 zsh 和其他現代替代方案有其粉絲,但我已經找到了我的快樂之地,並且很滿足於待在那裡。

作為 BBS 時代的產物,當時 ANSI 圖形是熱門話題,我花費了與其他熱衷終端機的系統管理員一樣多的時間來客製化我的環境,並使其成為一個讓我感到舒適的工作場所。

……天啊,我正在做這件事。我正在做食譜網站上那種事情,讀者真正想知道的是製作胡桃派的食譜,卻得到了一大堆個人背景故事。請原諒我。我老了。讓我們來做派吧,我說的派是指螢幕截圖和程式碼!

至少對我來說,能夠輕鬆查看上一個命令運行了多久的參考資料非常方便。(你不需要這種東西,直到你需要它,而那時你通常真的很需要它。)為此,我在我的 .bashrc 文件中加入了一些函數,這些函數會計時每個命令,然後將該時間——以及最後發出的錯誤代碼——附加到下一個 bash 提示符中。實際上,它看起來是這樣的:

我喜歡這個。結合提示符中顯示的當前時間,你可以清楚地了解過去幾個命令運行了多久,以及你是在什麼時候運行的。這對於那些會將終端機工作階段開上幾天而其中有重要工作的人來說非常方便(/me 舉手)。

這是讓這一切發生的程式碼,你可以隨意根據自己的需求進行修改。如前所述,我將其保存在 .bashrc 中,作為我的 PS1 提示符語句的一部分:

這一堆函數將所有這些優點都塞進了你的提示符中,如果程式以錯誤代碼 0 退出,則會顯示一個漂亮的綠色「勾號」,如果退出時出現其他錯誤,則會顯示一個紅色的「X」和錯誤代碼。顏色定義——$WHITE、$BLUEBOLD、$HOSTCOLOR 等——只是 .bashrc 中定義的普通 ANSI 轉義序列,這裡沒有呈現,是為了避免程式碼片段過長。你可以也應該用任何你喜歡的東西來替換它們。

timer_stop 函數還有將計時器轉換為人類可讀格式的任務,而且可能比它需要的要混亂。但我不是開發人員,所以這是我在花費幾個小時搜尋範例後,過去的 Lee 決定的。

這是當我透過 ssh 連線到我的 Linux 主機時使用的 bash,但在 macOS 上我運行的是 fish。我有一個單獨的 fish 函數來獲得相同的結果,其中包括將測量結果轉換為人類可讀格式的粗糙技巧。我寫了這段程式碼,我對此毫不後悔。看看我拼湊的 StackOverflow 來源的蹩腳貨。

我在 BBS 圖形時代度過了我的成長時期,這可能讓我比一般刻板、穿著正裝的系統管理員更喜歡終端機中的彩色文字。看,我知道有些人認為語法高亮和顏色會損害理解力並鼓勵略讀,但我能說什麼呢?我愛它們,並且依賴它們。也許我讀得太快了,但就這樣吧。你可以從我冰冷、死去的雙手中奪走我色彩繽紛的 Shell 工具。

為此,我依賴一個名為 GRC(Generic Colorizer)的小程式來為其他工具添加高亮和顏色。它廣泛可用,無需額外配置即可工作。

有一些別名(我像個好公民一樣將它們保存在 .bash_aliases 中),以便為一些常用命令啟用彩色輸出作為預設值:

我也很喜歡讓我的數字變得人類可讀,因此 -h 開關被廣泛應用。

(請注意,將 ip 等命令包裝在 GRC 中有時在將其輸出管道傳輸到其他內容時可能會產生奇怪的結果。請謹慎使用。或者不用!這是你的電腦,隨你怎麼做!)

眼尖的讀者會從螢幕截圖中注意到,我使用的是 macOS 的 Terminal.app 作為我的終端機程式,儘管有更好的選擇。我想我的藉口是,我習慣了 Terminal.app,而且沒有什麼能讓我放棄它。我測試過一些常見的選項——Ghostty、Alacritty、強大的 iTerm2(具有出色的 tmux 視窗整合功能),甚至像 Warp 這樣對終端機體驗進行的全新詮釋。

但我就是找不到一個能讓我信服的理由來更換。更換終端機應用程式不可避免地會導致外觀不同——ANSI 顏色被重新解釋或映射奇怪,高亮使用不同的色調,或者我特別喜歡的藍色突然變成另一種藍色,我必須花 20 分鐘調整 ANSI 轉義序列來試圖讓它再次匹配。生命太短暫了,不值得這樣做。

如果我是一個更聰明、更進階的終端機使用者——那種使用 Vim 模式透過精準的、手工製作的正規表達式來熟練地從我的命令歷史中提取內容,而不是像野蠻人一樣將歷史管道傳輸給 grep,同時瘋狂地試圖弄清楚過去的 Lee 到底在想什麼——那麼像 Ghostty 這樣的東西可能是一個自然的選擇。或者 iTerm,如果我能真正做出心理上的轉變,承諾使用 tmux,並晉升為終端機神。

至少我可以從知道我並不孤單地處於泥沼中得到一些安慰,因為 Ars 的高科技祭司 Jason Marlin 和我在討論這篇文章時發現了這一點:

看來,神化必須等待。

引導我走向終端機的道路也引導我走向了編輯器戰爭中的陣營,正如預期的那樣,我崇拜 vi 教會(或者至少是其新教式的分支,Vim 教會)。就像 Terminal.app 一樣,這是一種主要依賴慣性的關係,而不是任何愛。Vim 和我已經達成了可以接受的休戰。

但要達到這一點需要大量的沮喪搜尋和對舊 StackOverflow 文章的抱怨。讓 Vim 對我來說很舒適的一件事是 Vim-Airline 和 Promptline 的結合,它們共同提供了一個漂亮的狀態欄,有助於突出顯示一些有用的資訊,當我編輯文件時。

我也更喜歡調整 Ubuntu 風格的 Vim 用於表示註釋的顏色,因為維護者幾年前將其從深藍色改為帶點青色的淺藍色,這讓我感到惱火。針對該特定顏色並使其保持不變實際上變成了一場合法的冒險,Ars 的校友 Jim Salter 最終破解了要編輯的確切文件(提示,不是 .vimrc!)。如果你想深入研究 Vim 的顏色內部,連結的文章應該會很有趣。(向 Jim 致敬!)

當然,既然我提到了 .vimrc,我們也必須看看裡面有什麼:

我非常喜歡 Monaspace 系列字體用於終端機,我愛並使用 Monaspace Neon——它出現在本文的所有終端機截圖中。我知道終端機字體就像選擇內褲品牌一樣個人化,但在嘗試了各種選項數十年後,Monaspace Neon 是我最接近找到一種近似我等寬字體理想的字體。當然,你的體驗可能會有所不同,但我喜歡它,我使用它,並且我覺得偶然發現它意味著我職業生涯的搜尋結束了。

我不能聲稱這篇文章中的任何客製化都是我獨自想出來的。這些零散的技巧隨著時間的推移而積累,吞噬了多年來的 StackExchange 帖子和 Reddit 線程。每當我看到一個很棒的東西,我就會複製程式碼並嘗試一下。現在,如果這些對你有用,你也可以這樣做。

但這,終於,把我們帶到了文章的重點——你們有什麼很酷的終端機技巧和竅門?我們很想看看你們是如何駕馭命令列的,從精心培育的 Neofetch 登入畫面到完全從頭開始的終端機替換,以及介於兩者之間的各種東西。我們將在文章下方推廣最好的內容供大家觀看。

所以分享吧!與我們分享你們的終端機,讓我們一起歡樂吧,因為我們生活在後 GUI 時代,而且它一點也不像我以前認為的那麼可怕。至少顏色很漂亮。

Ars Technica 在 25 年來一直致力於分離訊號與雜訊。憑藉我們獨特的技術知識和對技術藝術與科學的廣泛興趣,Ars 是資訊海洋中值得信賴的來源。畢竟,你不需要知道一切,只需要知道重要的東西。