幽灵剪切:为什么剪切与粘贴到处都是坏的

查看原文 HN 讨论

文章摘要

作者(Textualize 的 Will McGugan,即 Rich / Textual 的作者)在这篇文章里主张:几乎每一个文字处理器、代码编辑器和浏览器文本框里的「剪切与粘贴」都存在设计缺陷,并提出了一个替代方案,他称之为「Ghost Cut(幽灵剪切)」。

他列举了传统剪切的三个问题。第一,剪贴板的改动不可撤销。撤销(undo)会把文本恢复到文档里,但剪贴板的内容已经被永久覆盖了——「如果你后悔替换掉剪贴板里的内容,那太糟了,它们已经消失在数字以太中。」第二,剪切会导致文档重排。剪切和粘贴的目的几乎总是「移动文本」,但你一按下剪切,文档立刻重排,于是你得重新找一遍要粘贴的位置。他承认这只是很小的认知负担,但认为是不必要的负担。第三,剪切与粘贴不是原子操作。即使中间没有任何编辑,要撤销「剪切+粘贴」也需要按两次撤销:第一次移除新粘贴的文本,第二次才恢复原位置的文本。

Ghost Cut 的方案是:按下 Ctrl+X 后,被选中的文本淡化并变为惰性——你无法点击它,光标会直接跳过它,但它仍然留在文档里,文档不重排。此时什么都没有进剪贴板,也就没有任何需要撤销的东西。如果你改变主意,按 Esc 就能把文本恢复为可编辑状态。按下 Ctrl+V 时,淡化的文本被移除、并出现在光标位置——整个移动作为一次可撤销的操作完成。这套方案保留了原有的肌肉记忆(还是 Ctrl+X / Ctrl+V),同时消除了剪贴板污染并实现了单步撤销。至于那些确实想要传统剪切语义的场合,作者的答案是:用 Ctrl+C 复制,然后按退格删除——两个键而不是一个键;他说自己极少用到「剪切但不粘贴」,所以这笔交易明显划算。作者呼吁各家文本编辑器广泛采纳,同时承认在代码编辑器里这个论证要弱一些。

文章在 HN 上得了 194 分和 150 条评论,但评论区的主流态度是不买账。反对意见集中在几点:剪贴板是操作系统级的共享状态,而撤销栈是应用级的,把两者耦合起来会制造更多问题;「剪切一次、粘贴多次」是很多人真实存在的工作流;「剪切然后撤销」被相当多人当作带视觉反馈的复制在用;以及最根本的一点——这不是缺陷,而是不同的心智模型。也有不少人指出,作者想要的「原子移动」其实早就存在,它叫拖放(drag & drop)。

HN 评论精华