Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 202 additions & 3 deletions _drafts/Article/Translation/some-terminal-frustrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,207 @@ translator: ""
reviewer: ""
---

• [terminal][1]
几周前我进行了一项终端调查(你可以[在这里阅读结果][1]),最后我问道:

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

[1]: /categories/terminal
1600 人回答了这个问题,我决定花几天时间对所有回答进行分类。在此过程中,我了解到对定性数据进行分类并不容易,但我尽力而为。我最终构建了一个自定义[工具][2],使分类一切变得更快。

与我所有的调查一样,方法并不特别科学。我只是将调查发布到 Mastodon 和 Twitter 上,运行了几天,并从恰好看到它并愿意回应的人那里获得了答案。

以下是令人沮丧的主要类别!

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

* 回答这项调查的人中有 40%已经使用终端**21 年以上**
* 回答调查的人中有 95%使用终端至少 4 年

这些评论并非来自完全的初学者。

以下是令人沮丧的类别!括号中的数字是有这种沮丧的人数。我主要是为自己写这篇文章,因为我正在尝试写一本关于终端的小册子,我想了解人们遇到的问题。

### [记住语法 (115)][3]

人们谈到了记住以下内容的困难:

* 像 awk、jq、sed 等 CLI 工具的语法
* 重定向的语法
* tmux、文本编辑等的键盘快捷键

一个示例评论:

> 要完全发挥功能,有太多小的"琐事"细节需要记住。即使经过这么多年,我有时仍会忘记 stderr 是 2 还是 1,或者忘记`>`和`>>`哪个是哪个。

### [切换终端很困难 (91)][4]

人们谈到了在切换系统(例如家庭/工作电脑或 SSH 时)时遇到的困难:

* 键盘快捷键的操作系统差异(如 Linux 与 Mac)
* 没有他们首选文本编辑器的系统("没有 vim"或"只有 vim")
* 同一命令的不同版本(如 Mac OS grep 与 GNU grep)
* 没有 tab 补全
* 不习惯的 shell("zsh 和 bash 之间的微妙差异")

以及同一系统内的差异,如分页器彼此不一致(git diff 分页器,其他分页器)。

一个示例评论:

> 我习惯了 fish 和 vi 模式,但当我 ssh 进入服务器、容器时,这些都不可用。

### [颜色 (85)][5]

关于颜色的许多问题,如:

* 程序设置的颜色在浅色背景下不可读
* 找到他们喜欢的配色方案(并使其在不同应用程序中一致工作)
* 在多层 SSH/tmux 等内部颜色不起作用
* 不喜欢默认设置
* 完全不想要颜色并努力关闭它

这个评论对我来说很有共鸣:

> 在终端模拟器和 fish 之间以合理的方式配置我的终端主题(我多年前做过这件事,记得它既繁琐又麻烦,现在感觉我被锁定在当前主题中,因为它能工作,我害怕再次触碰任何那些配置)。

### [键盘快捷键 (84)][6]

关于键盘快捷键的评论中,有一半是关于在 Linux/Windows 上,终端中的复制/粘贴键盘快捷键与操作系统其余部分不同。

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

* 在基于浏览器的终端中使用`Ctrl-W`并关闭窗口
* 终端只支持有限的键盘快捷键(没有`Ctrl-Shift-`,没有`Super`,没有`Hyper`,许多`ctrl-`快捷键不可能,如`Ctrl-,`)
* 操作系统阻止你使用终端键盘快捷键(比如默认情况下 Mac OS 将`Ctrl+左箭头`用于其他用途)
* 在终端中使用 emacs 的问题
* 退格键不工作(2)

### [其他复制和粘贴问题 (75)][7]

除了"复制和粘贴的键盘快捷键不同"之外,还有很多其他复制和粘贴问题,如:

* 通过 SSH 复制
* tmux 和终端模拟器以不同方式处理复制/粘贴
* 处理多个不同的剪贴板(系统剪贴板、vim 剪贴板、Linux 上的"中键点击"剪贴板、tmux 的剪贴板等)并可能同步它们
* 从终端复制时添加的随机空格
* 粘贴多行命令,这些命令以可怕的方式自动运行
* 希望有一种不使用鼠标复制文本的方法

### [可发现性 (55)][8]

有很多关于这方面的评论,都归结为同一个基本抱怨——很难发现有用的工具或功能!这个评论基本上总结了一切:

> 独立学习有多困难。我所知道的大部分都是多年来从随机人那里听到的各种东西的集合。

### [学习曲线陡峭 (44)][9]

很多评论提到它通常有陡峭的学习曲线。几个示例评论:

> 使用它 15 年后,我的使用速度并不比 5 年甚至 10 年前快多少。

以及

> 我知道通过学习更多关于快捷键和命令以及配置终端,我可以让我的生活更轻松,但我不花时间,因为感觉太 overwhelming 了。

### [历史记录 (42)][10]

一些 shell 历史记录的问题:

* 历史记录不在终端标签之间共享(16)
* 限制太短(4)
* 恢复终端标签时历史记录不被恢复
* 因为终端崩溃而丢失历史记录
* 不知道如何搜索历史记录

一个示例评论:

> 直到我弄明白它,它浪费了我很多时间,而且仍然让我感到恼火的是,zsh 上的"history"缓冲区如此之小;我必须输入"history 0"才能获得任何有用长度的历史记录。

### [糟糕的文档 (37)][11]

人们谈到:

* 文档通常晦涩难懂
* man 页面中缺乏示例
* 没有 man 页面的程序

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

> 找到好的例子和文档。Man 页面通常不够,必须浏览 stack overflow

### [回滚 (36)][12]

关于回滚的一些问题:

* 程序打印出太多数据,使你失去回滚历史
* 调整终端大小会搞乱回滚
* 缺乏时间戳
* 在后台启动的 GUI 程序打印出的东西妨碍了其他程序的输出

一个示例评论:

> 当调整终端大小(特别是:使其变窄)导致回滚内容的重新换行被破坏,因为命令根据终端窗口宽度格式化了它们的输出。

### ["感觉过时" (33)][13]

很多评论提到终端感觉受到遗留决策的阻碍,以及用户经常需要学习感觉非常深奥的实现细节。一个示例评论:

> 大部分遗留的东西,如果能有一个全新实现的 CLI 界面就太好了。

### [shell 脚本 (32)][14]

对 POSIX shell 脚本有很多抱怨。普遍感觉是 shell 脚本很难,但切换到不同的不太标准的脚本语言(fish、nushell 等)也会带来自己的问题。

> Shell 脚本。我放弃 shell 脚本转向脚本语言的容忍度相当低。它太混乱且功能强大。搞砸可能代价高昂,所以我甚至不去尝试。

### [更多问题][15]

一些被提及至少 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)][16]

还有 122 个回答表示"没什么真正的问题"或"只是我不能在终端中做所有事情"

一个示例评论:

> 我想我已经找到了解决大多数/所有沮丧的方法

### [就是这些!][17]

我不会对这些结果做太多评论,但这里有几个对我来说感觉相关的类别:

* 记住语法和历史记录(通常你需要记住的东西是你以前运行过的东西!)
* 可发现性和学习曲线(缺乏可发现性肯定是使其难以学习的一大部分)
* "切换系统很困难"和"感觉过时"(30 或 40 年来没有真正改变的工具有很多问题,但它们确实倾向于无论你在什么系统上都_存在_,这非常有用,使它们难以停止使用)

尝试以合理的方式对所有这些结果进行分类,真的让我对社会科学研究人员的技能有了更深的认识。

[1]: https://jvns.ca/terminal-survey/results-bsky
[2]: https://github.com/jvns/classificator
[3]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#remembering-syntax-115
[4]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#switching-terminals-is-hard-91
[5]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#color-85
[6]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#keyboard-shortcuts-84
[7]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#other-copy-and-paste-issues-75
[8]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#discoverability-55
[9]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#steep-learning-curve-44
[10]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#history-42
[11]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#bad-documentation-37
[12]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#scrollback-36
[13]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#it-feels-outdated-33
[14]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#shell-scripting-32
[15]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#more-issues
[16]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#n-a-122
[17]: http://jvns.ca/blog/2025/02/05/some-terminal-frustrations/#that-s-all