Some terminal frustrations

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 之间的细微差异”)

还有同一系统内部的差异,比如各种分页器彼此不一致(git diff 的分页器、其他分页器等)。

一条示例评论:

我已经习惯了 fish 和 vi 模式,但当我 SSH 到服务器和容器里时这些都用不了。

颜色问题(85)

关于颜色的很多问题,比如:

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

这条评论让我很有共鸣:

要在终端模拟器和 fish 之间合理地配置我的终端主题(我几年前做过这件事,记得当时既繁琐又费劲,现在感觉自己被锁死在当前主题上了,因为它能用,而且我一想到要再碰那些配置就发怵)。

键盘快捷键(84)

关于键盘快捷键的评论中,有一半是关于 Linux/Windows 上终端里的复制/粘贴快捷键与操作系统其他地方不一样的问题。

除了复制/粘贴之外的其他快捷键问题:

  • 在基于浏览器的终端中使用 Ctrl-W 结果把窗口关掉了
  • 终端只支持有限的键盘快捷键集合(不支持 Ctrl-Shift-SuperHyper,很多 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 页面缺少示例
  • 有些程序根本没有 man 页面

这是一条有代表性的评论:

找不到好的示例和文档。man 页面往往不够用,只能去 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 个回答的大意是“没什么特别的”,或者“唯一的问题是终端不能做所有事情”。

一条示例评论:

我觉得大部分/所有的烦恼我都找到了变通办法。

就到这里啦!

我不打算对这些结果做太多评论,但有几组类别在我看来是相互关联的:

  • 记不住语法 & 历史记录(你常常需要记住的正是你以前运行过的东西!)
  • 可发现性 & 学习曲线(缺乏可发现性无疑是导致学习困难的一大原因)
  • “切换系统很困难” & “感觉过时了”(那些三四十年没怎么变过的工具有很多毛病,但无论你在什么系统上,它们总是在那里,这非常有用,也让人难以停止使用它们)

尝试以合理的方式对所有这些结果进行分类,让我真正体会到了社会科学研究者的功力。

原文由 Julia Evans 发布

本文章由 stealth/ox-alpha 进行翻译