几周前,我发起了一项终端调查(你可以在这里查看结果),并在最后问了这样一个问题:

对你来说,使用终端最令人沮丧的事情是什么?

1600人给出了回答,我决定花几天时间对所有回复进行分类。在这个过程中,我意识到对定性数据进行分类并不容易,但我尽力做到了最好。最终,我构建了一个自定义工具,以便更高效地对所有内容进行分类。

和我的所有调查一样,这次的方法论并非特别科学。我只是在 Mastodon 和 Twitter 上发布了调查,运行了几天,然后从那些碰巧看到并愿意回复的人那里收集了答案。

以下是令人沮丧的几大类问题!

在阅读这些评论时,我认为值得记住的是:

  • 参与调查的人中,有 40% 使用终端已经 21 年以上
  • 参与调查的人中,有 95% 使用终端至少 4 年

这些评论并非来自完全的新手。

以下是令人沮丧的几大类问题!括号中的数字是遇到该问题的人数。我主要是为自己记录这些内容,因为我正在尝试写一本关于终端的杂志,想了解人们在使用中遇到了哪些困难。

记住语法 (115)

人们提到难以记住:

  • CLI 工具(如 awk、jq、sed 等)的语法
  • 重定向的语法
  • tmux、文本编辑等的键盘快捷键

一个示例评论:

要实现完整功能,需要记住太多琐碎的“细节”。即使过了这么多年,我有时还是会忘记 stderr 是 2 还是 1,或者忘记 >>> 哪个是哪个。

切换终端很困难 (91)

人们提到在切换系统(例如家庭/工作电脑或通过 SSH 连接时)时遇到困难,包括:

  • 操作系统在键盘快捷键上的差异(如 Linux 与 Mac)
  • 系统没有他们偏好的文本编辑器(“没有 vim”或“只有 vim”)
  • 同一命令的不同版本(如 Mac OS 的 grep 与 GNU grep)
  • 没有 Tab 补全功能
  • 不习惯的 shell(“zsh 和 bash 之间的细微差别”)

以及同一系统内部的分页器不一致(如 git diff 分页器与其他分页器)。

一个示例评论:

我习惯了 fish 和 vi 模式,但当我通过 SSH 连接到服务器或容器时,这些模式不可用。

颜色 (85)

与颜色相关的许多问题,例如:

  • 程序设置的颜色在浅色背景下难以阅读
  • 找到自己喜欢的配色方案(并让它在不同应用中保持一致)
  • 在多层 SSH/tmux 等环境中颜色失效
  • 不喜欢默认设置
  • 根本不想要颜色,却难以关闭

这条评论让我感同身受:

我花了好几年才把终端模拟器和 fish 的终端主题配置得比较合理(这事我几年前干过,记得特别繁琐磨人,现在感觉被当前主题锁死了——因为能用就凑合着,一想到要再碰那些配置就头大)。

键盘快捷键(84条)

关于键盘快捷键的评论中,有一半都在吐槽 Linux/Windows 系统里,终端的复制粘贴快捷键和操作系统其他地方的快捷键不一样。

除了复制粘贴,键盘快捷键还有这些糟心事:

  • 在浏览器终端里按 Ctrl-W 结果把窗口关掉了
  • 终端只支持有限的键盘快捷键(没有 Ctrl-Shift-,没有 Super,没有 Hyper,很多 ctrl- 组合键也用不了,比如 Ctrl-,
  • 操作系统会拦截终端的键盘快捷键(比如 macOS 默认把 Ctrl+左箭头 分配给了其他功能)
  • 在终端里用 emacs 时遇到问题
  • 退格键失灵(2条)

其他复制粘贴问题(75条)

除了“复制粘贴快捷键不一样”之外,还有一大堆其他复制粘贴问题,比如:

  • 通过 SSH 复制内容
  • tmux 和终端模拟器各自用不同方式处理复制粘贴
  • 要应付好几种剪贴板(系统剪贴板、vim 剪贴板、Linux 的中键点击剪贴板、tmux 的剪贴板等等),还得想办法让它们同步
  • 从终端复制时莫名其妙多了空格
  • 粘贴多行命令时,命令会自动执行,场面极其吓人
  • 想不用鼠标就能复制文本

可发现性(55条)

这方面评论很多,归根结底都是同一个抱怨——有用的工具或功能太难发现了!这条评论基本概括了一切:

自学起来太难了。我知道的东西大多是这些年别人随口告诉我的零散知识。

陡峭的学习曲线(44条)

很多评论提到终端学习曲线普遍很陡。举两个例子:

用了 15 年终端,现在用起来也没比 5 年甚至 10 年前快多少。

还有:

我知道多学点快捷键和命令、好好配置终端能让我更省事,但我就是没花时间,因为感觉太吓人了。

历史记录(42条)

shell 历史记录的一些问题:

  • 不同终端标签页之间历史记录不共享(16条)
  • 历史记录长度限制太短(4条)
  • 恢复终端标签页时历史记录没恢复
  • 终端崩溃导致历史记录丢失
  • 不知道怎么搜索历史记录

举个例子:

我花了好多时间才搞明白,而且到现在还烦——zsh 的 “history” 缓冲区太小了;我得输入 “history 0” 才能看到足够长的历史记录。

糟糕的文档(37次提及)

人们讨论的问题包括:

  • 文档普遍晦涩难懂
  • 手册页缺乏示例
  • 某些程序没有手册页

以下是一条代表性评论:

寻找好的示例和文档很困难。手册页往往不够用,还得去 Stack Overflow 上翻找。

回滚问题(36次提及)

回滚功能存在几个问题:

  • 程序输出过多数据导致丢失回滚历史
  • 调整终端窗口大小会破坏回滚内容
  • 缺少时间戳
  • 在后台启动的 GUI 程序输出内容干扰其他程序的输出

一条示例评论:

调整终端窗口大小时(尤其是变窄),会导致回滚内容的换行错乱,因为命令的输出格式是基于终端窗口宽度生成的。

“感觉过时了”(33次提及)

大量评论指出终端受限于历史遗留决策,用户常常需要学习非常晦涩的实现细节。一条示例评论:

大部分历史遗留的糟粕,真希望能有一个从零开始的 CLI 界面实现。

Shell 脚本(32次提及)

关于 POSIX Shell 脚本的抱怨很多。普遍感觉 Shell 脚本很难写,但切换到其他非标准脚本语言(如 fish、nushell 等)又会带来新问题。

Shell 脚本。我放弃 Shell 脚本转而使用脚本语言的容忍度很低。它太混乱又太强大。搞砸了代价很高,所以我干脆不碰。

更多问题

以下是被提及至少 10 次的其他问题:

  • (31次)命令行参数不一致:到底是 -h、help 还是 –help?
  • (24次)在不同系统间同步点文件
  • (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 条回答大致意思是“没什么大问题”或“只是不能在终端里做所有事”。

一条示例评论:

我觉得已经找到了应对大部分/所有烦恼的变通方法。

以上就是全部内容!

我不会对这些结果做太多评论,但以下几个类别让我觉得彼此关联:

  • 记忆语法与历史(通常你需要记住的东西,正是你之前运行过的内容!)
  • 可发现性与学习曲线(缺乏可发现性无疑是学习困难的重要原因)
  • “切换系统很难”与“感觉过时”(那些三四十年未变的工具虽然问题不少,但无论你使用什么系统,它们往往始终存在,这非常实用,也让人难以弃用)

试图以合理的方式对所有结果进行分类,确实让我对社会科学研究者的技能心生敬意。