一些终端使用中的烦恼
几周前我做了一次终端使用调查(你可以在这里阅读结果),在最后我问了这样一个问题:
对你来说,使用终端最令人沮丧的是什么?
有 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-、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 页面缺少示例
- 有些程序根本没有 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 个回答的大意是“没什么特别的”,或者“唯一的问题是终端不能做所有事情”。
一条示例评论:
我觉得大部分/所有的烦恼我都找到了变通办法。
就到这里啦!
我不打算对这些结果做太多评论,但有几组类别在我看来是相互关联的:
- 记不住语法 & 历史记录(你常常需要记住的正是你以前运行过的东西!)
- 可发现性 & 学习曲线(缺乏可发现性无疑是导致学习困难的一大原因)
- “切换系统很困难” & “感觉过时了”(那些三四十年没怎么变过的工具有很多毛病,但无论你在什么系统上,它们总是在那里,这非常有用,也让人难以停止使用它们)
尝试以合理的方式对所有这些结果进行分类,让我真正体会到了社会科学研究者的功力。
随机一篇博客