1

複数行のテキストを Emacs に貼り付けると、アトミックに挿入されます。ただし、元に戻すには、C-/(またはM-x undo⏎</kbd>) repeatedly, undoing one line at a time. Is it normal?

単一の貼り付け操作を元に戻すにはC-/?

4

5 に答える 5

3

ターミナルで Emacs を実行すると、ペーストは実際には Emacs ではなくターミナルに送られます。Emacs は端末からキーを 1 つずつ受け取ります。

いくつかの回避策がありますが、元に戻すほど簡単なものはありません。たとえば、 に貼り付けてから*scratch*、そこから kill-n-yank します。または、貼り付ける前に を押しC-spaceます。その後、 を押すだけで元に戻すことができますC-w

于 2012-11-14T11:02:12.367 に答える
2

私は実際に、最後のセーブポイント以降のすべての変更を元に戻すカスタム elisp を使用しています。頻繁に保​​存する場合 (私はそうしています)、これにより優れた論理的な元に戻す機能が提供されます。ブロックを貼り付ける前にバッファを保存したと仮定すると、これにより貼り付け全体が削除されます。(複数のセーブポイントで機能することに注意してください。つまり、元に戻す履歴をさかのぼって、一度にセーブポイントを元に戻すことができます)。

(defun undo-last-modification ()
  "Undo all changes since last save point in the buffer."
  (interactive)
  (let* ((repeat-undo (eq last-command 'undo))
         (cur-undo-list (if repeat-undo pending-undo-list buffer-undo-list))
         (head (car-safe cur-undo-list))
         (tail (cdr-safe cur-undo-list))
         (found-next-mod nil)
         (num-undos 0))

    ;; when in the midst of undoing, the first nil gets chopped off the list,
    ;; so add one if the list doesn't start with nil
    (if head (setq num-undos (1+ num-undos)))

    ;; search for next save point in the undo list
    (while (not found-next-mod)
      (if (not head)
          (setq num-undos (1+ num-undos))
        (if (and (listp head) (eq (car-safe head) t))
            (setq found-next-mod t)))
      (if tail
          (progn
            (setq head (car-safe tail))
            (setq tail (cdr-safe tail)))
        ;; end of list
        (setq found-next-mod t))
      )

    (if (> num-undos 0)
        (undo num-undos))
    )
)
于 2012-11-14T12:59:12.877 に答える
1

うーん...最後のコマンドからの時間が非常に短い場合、pre-command-hook最後を削除する a を使用することを提案しようとしていました。しかし、実行undo-boundaryに元に戻す境界が追加されることがわかったので、それはオプションではありません。そのようなことが可能になるように (またはデフォルトで提供されるように) お願いしたいかもしれません。pre-command-hookM-x report-emacs-bug

于 2012-11-14T14:48:02.167 に答える
1

Mac OS ターミナルで Emacs を実行している場合は、次のソリューションが役立つ場合があります: https://stackoverflow.com/a/3963229/114833

于 2012-11-14T13:31:16.103 に答える
0

これ(global-set-key [f5] 'undo);をemacs設定ファイル(.emacs )に入れると、F5コマンドで貼り付けなどの最後の操作を元に戻すことができます。実際には、F5以外でも好きなようにキーを設定できます。

于 2012-11-14T10:40:58.207 に答える