终端的那些烦恼
原文由 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-、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)
关于回滚缓冲的几个问题:
- 程序输出太多数据,导致回滚历史丢失
- 调整终端窗口大小会弄乱回滚内容
- 缺少时间戳
- 在后台启动的图形界面程序不断输出内容,干扰其他程序的输出
举一个例子:
调整终端大小时(尤其是把窗口调窄),回滚内容的重排会乱掉,因为命令的输出是根据当时的终端窗口宽度来格式化的。
“感觉过时了”(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 个回答大致意思是“其实没什么”或“唯一的烦恼就是不能在终端里做所有事”
举一个例子:
我觉得大多数/所有的烦恼我都已经找到变通办法了
就这些了!
我不打算对这些结果做太多评论,不过有几类在我看来是相互关联的:
- 记不住语法和历史记录(很多时候你需要记住的东西就是你之前运行过的命令!)
- 可发现性和学习曲线(缺乏可发现性无疑是导致难学的一大原因)
- “切换系统很麻烦”和“感觉过时了”(那些三四十年都没怎么变的工具有很多问题,但它们的好处是无论在什么系统上都一直存在,这非常有用,也让人很难弃用)
尝试以合理的方式给所有这些结果做分类,真的让我对社会科学研究者的能力肃然起敬。
随机一篇博客
评论
登录后参与讨论