294

この記事では、「元に戻すときに方向を逆にして、元に戻すことができるため、Emacsにはやり直しがあります」と書かれています。

これは何を意味するのでしょうか?ユーザーはどのようにしてEmacsで「やり直す」ことができますか?

4

10 に答える 10

314

ショートバージョン:元に戻すを元に戻す。元に戻した後、などの非編集コマンドを実行するとC-f、次の元に戻すと元に戻るが元に戻され、やり直しが行われます。

長いバージョン:

元にしいとは、操作のスタックを操作することと考えることができます。一連の取り消し操作の後に何らかのコマンド(などのナビゲーションコマンドもC-f)を実行すると、すべての取り消しが操作スタックにプッシュされます。したがって、次の元に戻すは最後のコマンドを元に戻します。次のような操作シーケンスがあるとします。

  1. 「foo」を挿入します
  2. 「バー」を挿入
  3. 「スパムが大好き」を挿入

今、あなたは元に戻します。最後のアクションを元に戻し、次のリストになります。

  1. 「foo」を挿入します
  2. 「バー」を挿入

この時点で元に戻す以外のことを行うと、たとえば、C-f操作スタックは次のようになります。

  1. 「foo」を挿入します
  2. 「バー」を挿入
  3. 「スパムが大好き」を挿入
  4. 「スパムが大好き」の挿入を元に戻す

さて、元に戻すとき、最初に元にされるのは元に戻すことです。元のスタック(およびドキュメントの状態)が生成されます。

  1. 「foo」を挿入します
  2. 「バー」を挿入
  3. 「スパムが大好き」を挿入

元に戻すシーケンスを中断するために変更コマンドを実行すると、そのコマンドは元に戻す後に追加されるため、後で最初に元に戻されます。を押す代わりに、「バー」の上にバックスペースしたとしますC-f。その後、あなたは持っていただろう

  1. 「foo」を挿入します
  2. 「バー」を挿入
  3. 「スパムが大好き」を挿入
  4. 「スパムが大好き」の挿入を元に戻す
  5. 「バー」を削除

この追加/再追加は無限に行われます。慣れるのに少し時間がかかりますが、それは本当にEmacsに非常に柔軟で強力な元に/やり直しのメカニズムを与えます。

于 2010-08-19T23:50:03.090 に答える
233

元に戻すには: C-_

元に戻す後にやり直すには: C-g C-_

複数回入力し C-_ て、元に戻されたこと C-_ をやり直しますemacsコマンドを複数回やり直すには、コマンドを実行してから入力C-xzし、キーを何度もz入力してコマンドを繰り返します(マクロを複数回実行する場合は興味深い)

于 2010-08-20T08:19:48.887 に答える
67
  • 一度元に戻すには:C-/
  • 2回元に戻すには:C-/ C-/
  • 元に戻した直後に一度やり直すには:C-g C-/
  • 元に戻した直後に2回やり直すには:C-g C-/ C-/C-g繰り返されないことに注意してください。
  • すぐに元に戻すには、一度C-g C-/
  • すぐにもう一度元に戻すには、2回:C-g C-/ C-/
  • もう一度やり直すには、同じ…</ li>

最後の元に戻すコマンド以降にキーを押した場合(文字を入力する場合でも、カーソルを移動する場合でも)、C-g次の元に戻す/やり直す前に入力する必要はありません。C-gは、それ自体では何もしない、ヒットするのに安全なキーですが、元に戻すシーケンスの終了を通知する非元に戻すキーとしてカウントされます。などの別のコマンドを押すC-fことも機能します。カーソルを持っていた場所から移動するだけです。

意図していなかったときにまたは別のコマンドを押して、間違っC-gた方向に元に戻している場合は、単に押して方向C-gを逆にします。必要な元に戻すには、偶発的なやり直しや元に戻すまでずっと元に戻す必要がありますが、を押し続けるC-/と、最終的には目的の状態になります。実際、一度ヒットしてから十分な回数C-g押すと、バッファがこれまでにあったすべての状態に到達できます。C-/

undo、以外の代替ショートカットはC-/、、、C-_およびC-x uですM-x undo

Emacsの元に戻すシステムの詳細については、Emacsマニュアルの「元に戻す」を参照してください。

于 2013-08-22T14:34:39.957 に答える
41

より一般的な元に/やり直し機能が欲しい人のために、誰かが書いていundo-tree.elます。これは、Emacs以外のアンドゥのルックアンドフィールを提供しますが、アンドゥ履歴の「ツリー」全体へのアクセスを提供します。

私はEmacsの組み込みのundoシステムが好きですが、このパッケージは非常に直感的であることがわかります。

ファイル自体からの解説は次のとおりです。

Emacsには強力な取り消しシステムがあります。ほとんどのソフトウェアの標準の元に戻す/やり直しシステムとは異なり、バッファの過去の状態を回復できます一方、標準の元に戻す/やり直しシステムは、やり直すとすぐに過去の状態を失う可能性があります)。ただし、この能力には代償が伴います。多くの人は、Emacsの元に戻るシステムを混乱させて使いにくく、より強力ではないがより直感的な元にできる/やり直しシステムに置き換える多くのパッケージを生み出しています。

標準の元に戻る/やり直しによるデータの損失とEmacsの元に戻るの混乱の両方は、元に戻る履歴を変更の線形シーケンスとして処理しようとすることに起因します。そうではありません。このパッケージによって提供される`undo-tree-mode'は、Emacsのundoシステムを、undo履歴をそれが何であるか(変更の分岐ツリー)として扱うシステムに置き換えます。この単純なアイデアにより、標準の元に戻す/やり直しシステムのより直感的な動作と、履歴を失うことのないパワーを組み合わせることができます。追加の副次的なボーナスは、取り消し履歴をより効率的に保存できる場合があり、Emacsが履歴の破棄を開始する前に、より多くの変更を蓄積できることです。

于 2010-08-20T15:42:36.807 に答える
24

やり直しのための元に木の癖に注意してください!

多くの人気のある「スターターキット」(プレリュード、パーセル、spacemacs)には、undo-treeがバンドルされています。ほとんど(すべて?)はそれを自動有効にします。前述のように、undo-treeは、undo/redoツリーを視覚化してトラバースするための便利な方法です。プレリュードはそれにキーコード(uu)、そしてまたを与えC-x uます。

問題は次のとおりです。undo-treeはEmacsのデフォルトでよく知られているREDOのバインディングを破壊しているようです:C-g C-/

代わりに、これらの対称キーを元に/やり直しに使用できます。

C-/     undo
C-S-/   redo

ビジュアライザーを開かずにすばやくやり直したい場合があるため、これらは便利です。

于 2016-03-14T18:50:06.363 に答える
12

Emacs 28はREDOコマンド(と呼ばれるundo-redo)を追加します。

より一般的な元に戻す/やり直しが必要な場合は、次のコマンドを使用できます。

(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)

この機能にアクセスするには(非線形履歴を使用する機能もあります。undoに組み込まれているemacsの薄いラッパーであるundo-fuを参照してください)。

于 2020-02-11T06:19:22.150 に答える
11

私は「通常の」元に戻る/やり直しを行うのに非常に便利だと思います。通常、次のように、CSzにバインドしてCzに元に戻しますredo.el

(when (require 'redo nil 'noerror)
    (global-set-key (kbd "C-S-z") 'redo))

(global-set-key (kbd "C-z") 'undo)

ファイルをダウンロードしてlisp-pathに入れ、上記をに貼り付けてください.emacs

于 2010-08-20T13:14:41.813 に答える
3

デフォルトでは、Emacsでやり直すにはCgを押してから元に戻す必要があります。

ただし、Emacsの組み込みのundoを使用してREDOコマンドを実装することも可能です。

パッケージundo-fuは、Emacsの組み込みのundo機能を使用して、undoとredoの両方を公開します。


Edit、undo-fuがevil-modeに統合されました(evil-modeユーザーの場合)。

例:

(use-package undo-fu)
(use-package evil
  :init
  (setq evil-undo-system 'undo-fu))
于 2019-12-14T05:59:07.313 に答える
3

Doom Emacsユーザーの皆さん、ここまでスクロールしたか、ページで「doom」を検索したことを願っています...

  • Doom EmacsはバニラEmacsのやり直しショートカットを壊します: C-g C-/ C-/ C-/etc(またはC-g C-_ C-_ C-_etc)...そして代わりにそれはただ元に戻し続けます。
  • Doom Emacsは、他の回答の1つでspacemacsなどに役立つと述べられているundo-tree redoショートカット S-C-/壊します: (AKA C-?)...代わりに、「C-?isnotdefined」というエラーがスローされます。

必要なものは次のとおりです。

  • 悪モードになる(悪モードC-zの内外を切り替える)(悪モードでは、オレンジカーソルではなく青いカーソルが表示されるはずです)
  • 'コマンドモード'AKA'通常モード'('挿入モード'ではEscなく)(コマンドモードに切り替える)(ラインカーソルではなくブロックカーソルが表示されるはずです)、そしてそれは
  • u元に戻す
  • C-rやり直し用
于 2021-01-07T05:32:33.083 に答える
1

最後の操作をやり直す場合は、次のようにします。

  1. ESC
  2. 別の元に戻す(C + /
于 2019-04-13T07:37:34.780 に答える