Ghost Cut – 或者为什么剪切粘贴到处都有问题
摘要
Ghost Cut 是一种新的剪切粘贴机制,使操作具有原子性,可一步撤销,并保留剪贴板内容。它通过淡出所选文本而不是立即删除来工作,允许用户取消或粘贴而不会污染剪贴板。
暂无内容
查看缓存全文
缓存时间: 2026/07/22 17:22
# 介绍 Ghost Cut —— 或为何剪切与粘贴到处都是坏的 — Ishmael
Source: https://ishmael.textualize.io/blog/ghost-cut/
剪切与粘贴在你用过的每一个文字处理器、代码编辑器和浏览器文本区域里都是坏的。而且这个状况已经持续了几十年。
为了达成共识:剪切与粘贴是两个操作的组合:*剪切* 将文本从文档中移除并放入剪贴板,*粘贴* 将该文本插入到文档中的新位置。
既然它如此普遍,怎么会是坏的呢?让我列举几个方面!
## 1. 剪切无法撤销
剪切与粘贴的第一个缺陷,是剪切无法完全撤销。剪切后的撤销(control+z 或 command+z)会将文档中的文本恢复到剪切前的状态,但对剪贴板的更改仍然保留。如果你后悔替换了剪贴板内容,那你就倒霉了——它们已经消失在数字虚空里了。即使你使用了剪贴板管理器,撤销操作也无法干净地还原你按下的那个按键所做的一切。
## 2. 剪切导致文档重排
第二个缺陷是剪切会导致文档重排。剪切与粘贴几乎总是为了移动文本,可就在我剪切的瞬间,文本重新排列了,我不得不重新定位想粘贴的那个位置。这可能只是一点认知负担,但我认为这是不必要的。
## 3. 剪切与粘贴不是原子操作
第三个也是最后一个缺陷是,尽管剪切与粘贴在概念上是将文本从一个地方移动到另一个地方的操作,但它无法作为一个步骤被撤销(暂时忽略剪贴板问题)。撤销粘贴会移除新添加的文本,但需要第二次撤销才能完全恢复原文——假设在剪切和粘贴之间没有任何编辑。如果存在中间编辑(比如创建了一个新段落),那还得先撤销它们,才能回到最初的剪切操作。
我在 Ishmael 中添加了一个机制来“修复”这些缺陷。好消息是,它不需要你重新训练肌肉记忆,也不需要你做任何超出当前习惯的事。
我把它叫做“Ghost Cut”,它的工作原理是这样的:按下 ctrl+x 会使选中的文本变淡并变得不可交互——你不能点击被剪切掉的文本,光标会直接跳过它,但它仍然保留在文档中。此时没有任何东西被放入剪贴板,也没有任何需要撤销的动作。如果你决定不想粘贴,按 escape 键即可将文本恢复为活跃可编辑的状态。
粘贴(通常的 control+v 或 command+v)会将幽灵化的 span 从其原始位置移除并放在光标处,从而形成一个单一的原子移动操作,且不涉及剪贴板。换句话说:它完全可以逆转,用一个步骤就能撤销,而且不会污染你的剪贴板。
以下是实际操作:

这并非没有先例。有些应用也做了类似的事,比如 Excel 会使被剪切的单元格变淡,但我还没在文本编辑器中看到过这种做法。
## 副作用
如果你想要原始的剪切语义呢?Ghost Cut 让你用两个键来实现:先复制到剪贴板(control+c 或 command+c),然后按 Backspace 从原文档中删除它。我极少在不粘贴的情况下使用剪切,所以对我来说这明显是更优的方案。
## 结论
我非常希望各种文本编辑器都能采用这个功能。诚然,代码编辑器的情况不那么有力。代码不会遇到重排问题,但即便如此,如果 VSCode 也有 Ghost Cut,我很可能会启用它。
相似文章
重新思考GNOME剪贴板问题
本文分析了为什么GNOME剪贴板管理器由于GJS的单线程合成器导致卡顿,并介绍了Strata,一款新的剪贴板管理器,它将繁重的工作移出合成器线程,从而消除卡顿。
Paste MCP 与 AI 工具
Paste 为 Claude、Codex 及其他 AI 工具引入了无限剪贴板功能,提升了工作效率。
ChatCut
ChatCut 是一款AI驱动的视频编辑器,可在ChatGPT、桌面应用和网页中使用。
Supaste
Supaste 是一款 macOS 的剪贴板管理工具,允许用户管理和粘贴剪贴板历史记录。
Cut/Storm
Cut/Storm 是一款基于浏览器的视频编辑器,可一键粘贴任意来源的视频、烧录字幕、裁剪画面并即时分享。