为什么剪切粘贴功能处处失灵?

Ghost Cut – or why Cut and Paste is broken everywhere

为什么剪切粘贴功能处处失灵?

剪切和粘贴功能在几十年来一直存在严重缺陷:剪切操作无法完全撤销,会导致剪贴板内容丢失;剪切后文档会立即重排,迫使用户重新定位粘贴位置;而且剪切与粘贴无法作为一个原子操作被撤销。为了解决这些问题,我在 Ishmael 编辑器中引入了 Ghost Cut 机制。按下 Ctrl+X 时,选中的文本会变淡并变为不可编辑状态,但不会进入剪贴板,也不会触发撤销记录。如果改变主意,按 Escape 即可恢复;若执行粘贴,文本会直接从原位置移动到新位置,整个过程无需剪贴板参与,且可一键撤销。这种设计既保留了肌肉记忆,又彻底修复了传统剪切粘贴的三大痛点。

剪切和粘贴功能在你用过的每一个文字处理器、代码编辑器和浏览器文本框中都是损坏的,而且这种情况已经持续了几十年。
  1. throwawayffffas

    剪切和粘贴是三个操作。

    剪切其实是两个操作:复制和删除。复制操作本身不会被撤销(undo)撤销,那么当你执行剪切时,它也不应该被撤销。我每天都会剪切、撤销、……、撤销,然后粘贴多次。这是一个功能,不是 Bug。

    > 剪切和粘贴不是原子的

    是的,因为这是两个不同的动作。

    如果你多次粘贴,“幽灵剪切”(Ghost Cut)会怎么做?先粘贴被剪切的内容,然后呢?粘贴你剪贴板里之前的内容?为什么我的编辑器需要读取我的剪贴板(为了实现回滚),如果我现在并没有粘贴?如果剪贴板里有个秘密密钥,我们是不是就直接把它交给 Copilot 或者任何正在运行的扩展程序了?

    剪切就是复制加删除,简单明了。

    在文件资源管理器中,“剪切和粘贴”是个糟糕的类比。文件资源管理器做的是“移动”(move)操作,“剪切”填入了第一个参数,“粘贴”填入了第二个参数。所以会出现变灰且在你粘贴前什么都不做的情况。文件系统根本没有剪贴板。此外,在文件浏览器中,你几乎不可能想把文件粘贴到多个地方,这在文本编辑器里却是完全成立的。

    编辑:

    听我说,我并不是说提议的语义不好,各有所好,但这完全是另一个操作,甚至根本不需要剪贴板。你可以有一个单独的快捷键,让文本变灰,然后把它移动到你想要的地方。整个操作可以是一个原子的“移动”(move),在所有方面都更清爽。

  2. Diogenesian

    在我看来,这篇文章读起来像是“剪切”的默认行为做出了一些可用性上的选择,而这些选择与作者个人的心智模型和工作流格格不入,这当然是完全合理的。但奇怪的是,人们竟然把这些描述为“缺陷”,而不是“选择”。

    最明显的例子似乎是第一个:通常,一次意外的剪切本意是想复制,而不是删除,所以把文本留在剪贴板里是一个合理的设计。我理解作者的视角,也许操作系统应该提供可配置的“剪切”。但我认为大多数人理解的“撤销”是“撤销对文件的更改”,而不是“撤销对文件 + 操作系统状态的更改”。从这个意义上说,默认行为并不是缺陷。

    再说一遍——作者关于替代剪切方式的观点是合理的,但它们似乎只迎合了少数用户。

  3. abanana

    请不要改变预期的行为!

    正如作者提到的,Excel 就是这么做的,这简直让人抓狂,因为它没有做它该做的事。

    “剪切”操作应该立即把内容放入剪贴板,这样如果你愿意,就可以把这段文本粘贴到其他程序中。

    自以为比用户更懂行,并不是破坏用户预期和正常工作流程的理由。你的想法可能确实不错,但为了少数人改进而破坏大多数人的体验,这是不值得的。

  4. nlawalker

    这正是 Windows 资源管理器在剪切文件时的做法,只不过它同时也把文件放入了剪贴板。

    > 按下 ctrl+x 会使选中的文本变淡并使其失效 [...] 此时没有任何内容被放入剪贴板

    > 如果你想要原始的剪切语义怎么办?“幽灵剪切”让它变成了两个按键而不是一个:先复制到剪贴板(control-C 或 command-C),然后按 Backspace 将其从原文档中删除。我很少在不粘贴的情况下使用剪切,所以这对我来说是一个明显的优势。

    这跟现有的功能一样“坏”,只是坏在了作者更喜欢的方式上。不过这是个很酷的想法,我喜欢它,这也让人不禁好奇,如果剪切/粘贴从未被开发成一种系统级的、跨应用的能力,其他应用程序会发展成什么样。

  5. tectec

    我觉得我不太会喜欢这个。他提到 Excel 有类似的做法,而 Excel 是我用来剪切/复制/粘贴体验最差的应用。

  6. wodenokoto

    作者的心智模型跟我完全不同。

    剪切是将文本从应用程序移动到一个独立的应用程序,即剪贴板。

    所以,就像我在应用程序 A 中编辑,切换到应用程序 B 然后按撤销,我不期望撤销会影响 A 一样,我也不期望撤销会影响剪贴板。

    “幽灵剪切”的工作方式更接近 Excel,而 Excel 总是让我栽跟头。在 Excel 中,我可能会复制一个单元格,做一些编辑,然后粘贴,结果却发现实际上什么都没有复制。在 Excel 中,复制和剪切只是对选区建立一个引用,如果在粘贴时该选区已被撤销或更改,那就根本没有什么可粘贴的了。

  7. xg15

    “幽灵剪切”基本上就是 Excel 一直以来处理剪切/粘贴的方式,我想可能根本不涉及剪贴板。

    看起来人们对剪切/粘贴有两种不同的预期。大多数软件似乎将其简单地视为“复制和粘贴”外加一个“删除”动作,而作者(以及 Excel)则将其视为“在文档内部移动内容”。

    我理解作者的观点,也理解那种令人沮丧的撤销行为,但我也想补充一点:“幽灵剪切”比“传统”的剪切/粘贴解释更不灵活:“幽灵剪切”期望我总是只有一个想要移动内容的位置,并且期望这个位置在同一个程序甚至同一个文档中。传统的剪切/粘贴没有这些限制。

    另一方面,如果传统的剪切/粘贴本质上只是美化的复制/粘贴,我想用“幽灵剪切”的解释来替换它也不会损失太多——人们仍然可以通过先复制再按 Backspace 来获得“传统”的行为……

  8. jerf

    剪切和粘贴到处都坏了,因为有太多应用程序自以为更懂行,试图去“修复”它。

    我的怨气因为身处 Linux 而加倍,在那里 GUI 应用程序可能比其他操作系统更鼓励这种做法。但我仍然有足够的独立理由去抱怨网站、手机,甚至有时是同一个应用程序内的情况,仅凭这些就足以让我有合理的投诉。

    剪贴板没有独立的撤销维度,因为大多数用户无法处理它。他们在维度上已经够满了。对于有能力处理的用户来说,操作系统级别的剪贴板管理器是更好的解决方案,而不是另一个应用程序以某种独特的方式去“修复”这个问题。

同日更多故事

2026-07-22