Some terminal frustrations

Julia Evans

終端機的那些煩惱

原文由 Julia Evans 發布,訂閱此部落格

幾週前我做了一份關於終端機的問卷調查(你可以在這裡閱讀結果),最後我問了:

對你來說,使用終端機時最讓人感到挫折的是什麼?

有 1600 人回答了這個問題,我花了幾天時間把所有回覆分類。一路上我才體會到,要為質性資料分類一點也不容易,但我還是盡力而為。最後我還自己打造了一個工具來加快分類的速度。

跟我以往的所有問卷一樣,這次的研究方法也不是特別科學。我只是在 Mastodon 和 Twitter 上發布問卷,進行了幾天,然後收集了剛好看到問卷、又有意願回覆的人的答案。

以下是大家最常提到的挫折類別!

在閱讀這些留言時,有幾點值得留意:

  • 有 40% 的填答者使用終端機已達 21 年以上
  • 有 95% 的填答者至少已使用終端機 4 年

這些留言並非來自完全的新手。

以下是各種挫折的分類!括號內的數字代表有此困擾的人數。我主要是為自己整理這些內容,因為我正在寫一本關於終端機的 zine,想先了解大家到底在哪裡卡關。

記不住語法(115)

大家提到很難記住:

  • 像 awk、jq、sed 等 CLI 工具的語法
  • 重新導向的語法
  • tmux、文字編輯等操作的快捷鍵

舉一個例子:

要完整發揮功能,有太多瑣碎的「小知識」要記。即使已經用了這麼多年,我有時還是會忘記 stderr 到底是 2 還是 1,或是搞混 >>> 哪個是哪個。

切換終端機很困難(91)

大家提到在不同系統之間切換時很吃力(例如家用/工作電腦,或透過 SSH 連線時),會遇到:

  • 鍵盤快捷鍵的作業系統差異(例如 Linux 和 Mac 的不同)
  • 系統上沒有自己慣用的文字編輯器(「沒有 vim」或「只有 vim」)
  • 同一個指令的不同版本(例如 Mac OS 的 grep 和 GNU grep)
  • 沒有 Tab 自動補齊
  • 不習慣的 shell(「zsh 和 bash 之間微妙的差異」)

還有同一系統內部的差異,例如不同的 pager 彼此不一致(git diff 的 pager 和其他 pager)。

舉一個例子:

我已經習慣了 fish 和 vi 模式,但當我透過 SSH 連到伺服器、容器時,這些都無法使用。

顏色(85)

關於顏色,大家遇到了很多問題,例如:

  • 程式設定的顏色在淺色背景下難以辨識
  • 找不到喜歡的配色(而且很難讓它在不同應用程式間保持一致)
  • 在多層 SSH/tmux 等環境下顏色無法正常顯示
  • 不喜歡預設值
  • 根本不想要顏色,卻很難把它關掉

這則留言讓我很有共鳴:

要在終端機模擬器和 fish 之間把終端機主題設定到一個合理的狀態(我幾年前做過一次,記得當時既繁瑣又麻煩,現在覺得自己被目前的主題綁住了,因為它還能用,我完全不想再去碰那些設定)。

快捷鍵(84)

關於快捷鍵的留言中,有一半是在抱怨在 Linux/Windows 上,終端機裡複製/貼上的快捷鍵和作業系統其他地方的不一樣。

除了複製/貼上之外,快捷鍵的其他問題包括:

  • 在瀏覽器中的終端機使用 Ctrl-W 結果把視窗關掉了
  • 終端機只支援有限的快捷鍵組合(沒有 Ctrl-Shift-、沒有 Super、沒有 Hyper,很多 ctrl- 快捷鍵也無法使用,例如 Ctrl-,
  • 作業系統阻擋你使用終端機的快捷鍵(例如 Mac OS 預設就把 Ctrl+left arrow 用在別的功能上)
  • 在終端機中使用 emacs 時遇到的問題
  • 倒退鍵無法使用(2)

其他複製貼上問題(75)

除了「複製貼上的快捷鍵不一樣」之外,還有很多其他複製貼上的問題,例如:

  • 透過 SSH 複製
  • tmux 和終端機模擬器各自用不同方式做複製貼上
  • 要處理眾多不同的剪貼簿(系統剪貼簿、vim 剪貼簿、Linux 上的「中鍵點擊」剪貼簿、tmux 的剪貼簿等),以及如何讓它們同步
  • 從終端機複製時會多出莫名的空格
  • 貼上多行指令時,會以令人害怕的方式自動執行
  • 想要一種不用滑鼠就能複製文字的方法

可發現性(55)

關於這點有很多留言,歸根究柢都是同一個抱怨——很難發現好用的工具或功能!這則留言算是總結了大家的心聲:

要靠自己學真的很難。我現在會的東西,大多是這些年來從不同人那裡東拼西湊聽來的。

學習曲線陡峭(44)

很多留言提到終端機整體學習曲線很陡。舉兩個例子:

用了 15 年,我用起來的速度並沒有比 5 年前、甚至 10 年前快多少。

以及

我知道如果多學一些快捷鍵和指令、好好設定終端機,生活會輕鬆很多,但我就是沒花時間去做,因為感覺太讓人卻步了。

歷史紀錄(42)

關於 shell 歷史紀錄的一些問題:

  • 歷史紀錄不會在不同終端機分頁之間共用(16)
  • 紀錄長度限制太短(4)
  • 還原終端機分頁時,歷史紀錄沒有一起還原
  • 因為終端機當掉而遺失歷史紀錄
  • 不知道怎麼搜尋歷史紀錄

舉一個例子:

在我搞懂之前浪費了很多時間,到現在還是很煩——zsh 的「history」緩衝區小得可憐,我得輸入「history 0」才能看到有點用處的長度。

文件寫得不好(37)

大家提到:

  • 文件整體來說很晦澀難懂
  • man page 缺乏範例
  • 有些程式根本沒有 man page

這是一則具代表性的留言:

要找到好的範例和文件很難。man page 常常不夠用,還得去 Stack Overflow 大海撈針

捲動回顧(36)

關於捲動回顧的幾個問題:

  • 程式印出太多資料,導致捲動回顧的歷史紀錄被洗掉
  • 調整終端機大小會弄亂捲動回顧
  • 缺少時間戳記
  • 在背景啟動的 GUI 程式會一直印出東西,干擾其他程式的輸出

舉一個例子:

當調整終端機大小時(特別是把它調窄),會導致捲動回顧內容的自動換行壞掉,因為指令是根據終端機視窗寬度來格式化輸出的。

「感覺很過時」(33)

很多留言提到終端機受限於歷史包袱,讓人覺得綁手綁腳,而且使用者常常得去學一些感覺非常冷僻的實作細節。舉一個例子:

那些遺留下來的陳舊包袱太多了,如果能有一個從零開始重新打造的 CLI 介面就好了。

Shell 腳本(32)

很多人在抱怨 POSIX shell 腳本。大家普遍覺得 shell 腳本很難寫,但換成比較不那麼標準的腳本語言(像是 fish、nushell 等)又會帶來別的問題。

Shell 腳本。我放棄 shell 腳本、改用其他腳本語言的容忍度很低。它就是又亂又強大。一旦搞砸代價可能很高,所以我乾脆不去碰。

更多問題

還有一些至少被提到 10 次的問題:

  • (31)指令列參數不一致:到底是 -h、help 還是 --help?
  • (24)在不同系統間同步 dotfiles
  • (23)效能(例如「我的 shell 啟動太慢」)
  • (20)視窗管理(可能同時混用了 tmux 分頁、終端機分頁和多個終端機視窗。那個 shell session 到底跑哪去了?)
  • (17)普遍感到害怕/不安(「那種癱瘓性的恐懼,擔心自己會用某個指令做出某件神祕的壞事,然後完全不知道該怎麼修復、復原,甚至根本搞不清楚發生了什麼事」)
  • (16)terminfo 問題(「當我嘗試新的終端機模擬器並透過 SSH 連到別處時,就得去學 terminfo。」)
  • (16)缺乏圖片支援(sixel 等)
  • (15)SSH 問題(例如 SSH 連線中斷後得重來)
  • (15)各種 tmux/screen 問題(例如 tmux 和終端機模擬器之間缺乏整合)
  • (15)打錯字與打字慢
  • (13)終端機因各種原因跑版(例如按到 Ctrl-S、用 cat 去看二進位檔等)
  • (12)shell 中的引號/跳脫字元
  • (11)各種 Windows/PowerShell 問題

無/沒有(122)

另外也有 122 個回答表示「沒什麼特別的」或「只是沒辦法在終端機裡做『所有』事情」

我想我已經為大多數/所有的困擾找到變通方法了

就是這些了!

我不會對這些結果做太多評論,不過有幾種類別在我看來是相關的:

  • 記不住語法與歷史紀錄(很多時候你需要記起來的,就是你以前跑過的東西!)
  • 可發現性與學習曲線(缺乏可發現性,絕對是讓學習變得困難的一大原因)
  • 「切換系統很困難」與「感覺很過時」(那些三、四十年來幾乎沒變過的工具雖然有很多問題,但它們的好處就是不管在哪個系統上幾乎都,這非常實用,也讓人很難停止使用它們)

試著用合理的方式把所有這些結果分類,讓我真心佩服起社會科學研究者的專業能力。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言