- 一般的な切り取りと貼り付けは、テキストの移動を2つの操作に分けて処理するため、完全な取り消しができず、文書の流れまで不必要に変えてしまう
- 切り取りを取り消しても、上書きされたクリップボードの内容は復元されず、クリップボードマネージャーを使っても、1回のキー入力が生んだ変更全体を元に戻せるわけではない
- テキストがすぐに消えて文書がリフローするため、貼り付ける位置を探し直す必要があり、移動全体を取り消すには少なくとも2回の Undo が必要になる
- 小説エディタ Ishmael の Ghost Cut は、
Ctrl+Xで選択範囲を薄く表示して非アクティブ化し、貼り付け時に元の位置から削除して新しい位置へ移す、単一のアトミック操作を行う - Ghost Cut はクリップボードを上書きせず、移動全体を一度に元に戻せるが、従来方式で切り取りだけを行うには、コピー後に
Backspaceを押す必要がある
従来の切り取り/貼り付けの動作
- 切り取り/貼り付けは、選択したテキストを文書から削除してクリップボードに入れる切り取りと、別の位置に挿入する貼り付けの組み合わせである
- テキストをある位置から別の位置へ移す1つの操作のように認識されるが、実際のエディタでは互いに分離した2つの操作として処理される
従来の切り取りの3つの欠陥
-
Undo でクリップボードを復元できない
- 切り取り後に
Ctrl+ZまたはCommand+Zを押すと、文書内のテキストは復元されるが、上書きされたクリップボードの内容は戻らない - クリップボードマネージャーを使っていても、1回のキー入力が生んだすべての変更をきれいに元に戻したことにはならない
- 切り取り後に
-
元のテキストの削除で文書が即座に再配置される
- テキストを切り取った瞬間、残りの内容が詰められ、文書の行と位置が再配置される
- ほとんどの切り取り/貼り付けはテキスト移動が目的だが、貼り付け先を見つける前に画面が変わり、位置を探し直さなければならない
- 負担は小さいかもしれないが、不必要な認知コストが発生する
-
移動がアトミック操作として処理されない
- 貼り付けを取り消すと、新しい位置に挿入されたテキストだけが削除され、元の位置へ復元するにはもう一度 Undo する必要がある
- 切り取りと貼り付けの間に新しい段落の作成などの編集があった場合、その操作から順に戻さなければ、元の切り取りまで復元できない
- 概念的には1つのテキスト移動だが、編集履歴では複数の段階に分離される
Ghost Cut の動作方式
- Ishmael で
Ctrl+Xを押すと、選択したテキストが薄く表示され、非アクティブ状態になるが、文書にはそのまま残る- その領域はクリックできず、カーソルも飛ばして移動する
- この時点ではクリップボードには何も保存されず、取り消す操作も作成されない
Escapeを押すと、テキストは再び編集可能な状態に復元される
Ctrl+VまたはCommand+Vを押すと、薄く表示された領域を元の位置から削除し、現在のカーソル位置へ移動する- 移動全体が単一のアトミック操作なので、1回の Undo で元に戻せる
- Excel で切り取ったセルを薄く表示する方式に似ているが、テキストエディタでは同じ方式を見かけることは少ない
- 従来の切り取り動作が必要な場合は、
Ctrl+CまたはCommand+CでコピーしてからBackspaceで元のテキストを削除する必要がある - コードエディタでは文書リフローの問題が少ないため必要性は相対的に低いが、VSCode に提供されるなら有効化して使う価値はある
1件のコメント
Hacker News の意見
X11 の選択/貼り付けを邪魔しないでほしい。今では昔のように使うには Shift を押す必要があるのか、毎回運任せになっている。
コピーと貼り付けにマウスとキーボードの両方を使わせる
選択 → Ctrl+C → クリック → Ctrl+Vという方式は野蛮で、X11 が正しく実装していたものを現代のアプリが台無しにしている。切り取りと貼り付けは 3 つの動作であり、切り取りはコピーと削除で構成される。Undo がコピーを取り消さないのと同じように、切り取りのクリップボード内容も元に戻すべきではない。切り取って Undo した後、何度も貼り付けるやり方を毎日使っている。
Ghost Cut で何度も貼り付けると何が出るべきなのか、ロールバックのためにエディタは貼り付けもしていないのにクリップボードを読むべきなのか、秘密鍵が入っていたら Copilot のような拡張機能に露出するのか疑問だ。
ファイルエクスプローラーの切り取りは、実際には出発地と目的地を順に指定する移動であり、ファイルシステムのクリップボードもなければ、複数の場所に貼り付けることもまれだ。提案された意味論が悪いというわけではなく、別のショートカットでテキストを薄く表示してからアトミックに移動する独立した機能のほうがすっきりしている。
切り取りを Undo しながら副作用を戻さないのは根本的な欠陥であり、Undo は条件によって数ステップだけ戻るのではなく、システムを以前の状態に復元すべきだ。
⌘+Cでファイルをコピーし、目的地で⌘+⌥+Vで移動、または⌘+Vでコピーする流れがなぜ批判されるのか分からない。目的地で動作を決めるので最も直感的だ。Windows も切り取ったファイルを薄く表示し、貼り付け時に移動してファイル消失を防ぐが、こうした良いユーザー体験は十分に評価されていない。
Ghost Cut は Excel の切り取り/貼り付けとほぼ同じで、クリップボードをまったく使わないこともあり得る。一般的なソフトウェアはこれをコピー・貼り付けに削除を付け加えたものと見るが、筆者と Excel は文書内でコンテンツを移動するものと見ている。
Ghost Cut には、目的地が正確に 1 つで、同じプログラムまたは文書内になければならないという制約がある。それでも既存の切り取りが結局コピー・貼り付けの変形なら、
コピーして Backspaceで同じ効果を得られるので、Ghost Cut に変えても失うものは多くなさそうだ。デフォルトの切り取りのユーザー体験が筆者の個人的なメンタルモデルに合わないだけで、欠陥ではない。誤って切り取ったならたいていはコピーするつもりだったのだから、テキストをクリップボードに残す設計は合理的だ。
ほとんどの人は Undo をファイル変更の取り消しとして理解しており、ファイルと OS の状態を一緒に戻すものとは見ていない。設定可能な切り取りは検討に値するが、多数派より少数のユーザーに合わせた代替案に近い。
切り取りとは、アプリから別アプリケーションであるクリップボードへテキストを移動する動作だ。アプリ A を変更した後にアプリ B で Undo したからといって A まで変わるとは期待しないのと同様、Undo がクリップボードに影響するとは期待しない。
Ghost Cut は Excel に似ていて、そのせいでよく戸惑う。Excel ではセルをコピーして編集した後に貼り付けようとすると、コピーされたものが実際の値ではなく選択範囲への参照で、その範囲が変更されたり Undo されたりして、何も貼り付けられないことがある。
最初から設計するなら、現在の切り取り/貼り付けへの批判は合理的だ。ただし切り取りと貼り付けは 2 つの動作なので、1 回の Undo で両方を戻すべきだという主張は不自然だ。
コマンドが
CUTANDPASTE1 つなのか、CUTとPASTEの 2 つなのかを問うRISC/CISC 的な選択に似ている。期待された動作を変えるべきではない。Excel も似た動作をするが、望むとおりに動かず非常に不便だ。
切り取りはただちにクリップボードへ入れ、他のプログラムにも貼り付けられるべきであり、少数のために改善しようとして多数のユーザーの期待と通常の流れを壊す価値はない。
Ctrl+Xでクリップボードに触れないなら、他のプログラムに貼り付けることもできない。理想的な流れを外れたときに生じる厄介ごとに比べて、利点が小さすぎる。こういう見方は自由だが、同意しにくい。むしろ選択した項目をコピーしようとしているのに、サイトやアプリが親切のつもりでまったく別の内容を入れるコピーの横取りから解決してほしい。
URL をコピーするときにブラウザが勝手に
https://を付けるのも望んでいない。Windows Explorer もファイルを切り取るときにこれと似た動作をするが、クリップボードにも記録する。
Ghost Cut も既存動作とは別の形で壊れているだけで、筆者の好みには合っているということだ。それでも、システム全体およびアプリ間の機能として切り取り/貼り付けが作られていなかったら、他のアプリがどう発展していたかを考えさせる興味深い発想だ。
この方式は好きになれなさそうだ。似た動作をするExcel は切り取り・コピー・貼り付けに関して最も嫌いなアプリだ。
切り取りはたいてい 1 回の貼り付けで終わるアトミックな移動なので、移動範囲の内外や相対・絶対参照かどうかを問わず、関連する参照がすべて更新される。貼り付けた後に表示が消えて 2 回貼り付けられないのもこのためだ。
一方でコピーすると、コピーされたセル間の相対参照だけが更新され、絶対参照やコピーされなかったセルの参照は変わらず、何度も貼り付けられる。範囲参照まで考えると、これが予想どおりに動くこと自体が驚きで、元の範囲を編集すると操作がキャンセルされる制約も理解できる。したがって Excel でのコピー後削除は、切り取りとは別の動作だ。
デフォルトの切り取りは維持し、特殊な移動を
Ctrl+Shift++に割り当てるべきだった。