終端機的一些困擾
幾週前我做了一份終端機問卷調查(你可以在這裡閱讀結果),最後我問道:
對你來說,使用終端機最讓人感到挫折的是什麼?
有 1600 人作答,我決定花幾天時間將所有的回覆分類。過程中我學到,分類質性資料並不容易,但我已盡力而為。為了加快分類速度,我最後還打造了一個客製化的工具。
和我所有的問卷調查一樣,這次的研究方法並不特別嚴謹。我只是在 Mastodon 和 Twitter 上發布問卷,進行了幾天,然後收集剛好看到問卷且願意回覆的人的答案。
以下是大家最常提到的困擾分類!
在閱讀這些留言時,我覺得有幾點值得放在心上:
- 有 40% 回答這份問卷的人已經使用終端機長達 21 年以上
- 有 95% 回答這份問卷的人至少已經使用終端機 4 年
這些留言並非來自完全的新手。
以下是各種困擾的分類!括號內的數字代表有此困擾的人數。我主要是為自己整理這些內容,因為我正在嘗試撰寫一本關於終端機的小誌,想了解一下大家究竟在哪些地方遇到困難。
記不住語法(115)
大家提到在記住以下東西的語法時遇到困難:
- 像是 awk、jq、sed 等 CLI 工具的語法
- 重新導向的語法
- tmux、文字編輯等的鍵盤快捷鍵
其中一則留言範例:
要完整發揮功能,有太多瑣碎的「小知識」要記。即使過了這麼多年,我有時還是會忘記 stderr 到底是 2 還是 1,或是搞混
>和>>哪個是哪個。
切換終端機很困難(91)
大家提到在切換系統時(例如在家用/工作電腦之間切換,或透過 SSH 連線時)會遇到困難,例如:
- 作業系統之間鍵盤快捷鍵的不同(例如 Linux 與 Mac)
- 系統上沒有自己慣用的文字編輯器(「沒有 vim」或「只有 vim」)
- 同一個指令的不同版本(例如 Mac OS 的 grep 與 GNU grep)
- 沒有自動補齊功能
- 不習慣的 shell(「zsh 與 bash 之間細微的差異」)
以及在同一個系統內部的差異,例如各個分頁器(pager)之間的不一致(git diff 的分頁器、其他分頁器)。
其中一則留言範例:
我已經習慣了 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 工作階段跑哪去了?)
- (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 則回答大致表示「沒什麼特別的」或「只是無法在終端機中完成所有事情」
我想我已經為大多數/所有困擾找到變通方法了
就這樣!
我不打算對這些結果做太多評論,不過以下有幾個分類在我看來是相關的:
- 記不住語法與歷史紀錄(往往你需要記住的東西就是你以前執行過的東西!)
- 可發現性與學習曲線(缺乏可發現性絕對是讓學習變得困難的一大原因)
- 「切換系統很困難」與「感覺過時了」(那些三、四十年來幾乎沒變過的工具雖然有很多問題,但它們優點就是無論在哪個系統上都一定找得到,這非常實用,也讓人很難停止使用它們)
嘗試以合理的方式將這些結果分類,真的讓我體會到社會科學研究人員的專業能力。
隨機一篇部落格