Some terminal frustrations

Julia Evans

终端的那些烦恼

原文由 Julia Evans 发布,订阅该博客

几周前我做了一次关于终端的问卷调查(你可以在这里查看结果),最后我问了这样一个问题:

对你来说,使用终端时最让人沮丧的是什么?

有 1600 人作答,我花了几天时间把所有回答做了分类。过程中我体会到,给定性数据做分类并不容易,但我还是尽力去做了。最后我还专门做了一个工具来加快分类的速度。

和我以往的所有调查一样,这次的方法也不怎么科学。我只是在 Mastodon 和 Twitter 上发布了问卷,跑了几天,收到了恰好看到并愿意回答的人的反馈。

以下是大家最常提到的几类烦恼!

在阅读这些评论时,我觉得有两点值得留意:

  • 40% 的受访者使用终端已经 21 年以上
  • 95% 的受访者至少已经使用了 4 年终端

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

以下是各类烦恼的具体分类!括号里的数字是提到该问题的受访者人数。我主要是为自己整理这些内容,因为我正在写一本关于终端的小册子,想了解一下大家都在哪些地方遇到了困难。

记不住语法(115)

很多人提到很难记住:

  • 像 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-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)

关于回滚缓冲的几个问题:

  • 程序输出太多数据,导致回滚历史丢失
  • 调整终端窗口大小会弄乱回滚内容
  • 缺少时间戳
  • 在后台启动的图形界面程序不断输出内容,干扰其他程序的输出

举一个例子:

调整终端大小时(尤其是把窗口调窄),回滚内容的重排会乱掉,因为命令的输出是根据当时的终端窗口宽度来格式化的。

“感觉过时了”(33)

很多人评论说终端受制于历史遗留决策,用户常常不得不去学一些非常晦涩的实现细节。举一个例子:

那些历史遗留的陈旧包袱太多了,要是能有一个从零开始重新设计的命令行界面就好了。

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 个回答大致意思是“其实没什么”或“唯一的烦恼就是不能在终端里做所有事”

举一个例子:

我觉得大多数/所有的烦恼我都已经找到变通办法了

就这些了!

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

  • 记不住语法和历史记录(很多时候你需要记住的东西就是你之前运行过的命令!)
  • 可发现性和学习曲线(缺乏可发现性无疑是导致难学的一大原因)
  • “切换系统很麻烦”和“感觉过时了”(那些三四十年都没怎么变的工具有很多问题,但它们的好处是无论在什么系统上都一直存在,这非常有用,也让人很难弃用)

尝试以合理的方式给所有这些结果做分类,真的让我对社会科学研究者的能力肃然起敬。

本文章由 muse-spark-1.2-contributor 进行翻译

评论