web-dev-qa-db-ja.com

Emacsで「元に戻す」後に変更を「やり直す」にはどうすればよいですか?

この記事 は、「アンドゥ中に方向を逆にすることができ、アンドゥを元に戻すことができるため、Emacsにはリドゥがあります」と書かれています。

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

254
prosseek

ショートバージョン:元に戻すを元に戻します。元に戻した後、次のような非編集コマンドを実行した場合 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に非常に柔軟で強力な元に戻す/やり直しのメカニズムを提供します。

279

元に戻すには: C-_

元に戻した後にやり直すには: C-gC-_

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

202
Jérôme Radix
  • Toundo一度:C-/
  • 2回元に戻すには:C-/C-/
  • redoを一度、元に戻した直後:C-gC-/
  • 元に戻した直後に2回やり直すには、C-gC-/C-/です。 C-gは繰り返されないことに注意してください。
  • Toundoすぐにagain、一度:C-gC-/
  • すぐに元に戻すには、2回:C-gC-/C-/
  • 再びやり直し、同じ…

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

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

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

Emacsのアンドゥシステムの詳細については、Emacsマニュアルの ndo を参照してください。

46
Rory O'Kane

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

Emacsの組み込みの取り消しシステムが好きですが、このパッケージは非常に直感的です。

ファイル自体からのコメントは次のとおりです。

Emacsには強力なアンドゥシステムがあります。ほとんどのソフトウェアの標準の元に戻す/やり直しシステムとは異なり、バッファの過去の状態を復元することができますanyやり直すとすぐに過去の状態)。しかし、このパワーには代償が伴います。多くの人がEmacsのアンドゥシステムを混乱させて使いづらく、多くのパッケージを作成してそれをより強力ではないがより直感的なアンドゥ/リドゥシステムに置き換えます。

標準の元に戻す/やり直しによるデータの損失、およびEmacsの元に戻すの混乱は、元に戻す履歴を変更の線形シーケンスとして処理しようとすることに起因します。そうではありません。このパッケージによって提供される「アンドゥツリーモード」は、Emacsのアンドゥシステムをアンドゥ履歴をそのままのシステム、つまり変更の分岐ツリーとして扱うシステムに置き換えます。このシンプルなアイデアにより、標準の元に戻す/やり直しシステムのより直感的な動作を、履歴を失うことのないパワーと組み合わせることができます。追加のボーナスとして、元に戻す履歴をより効率的に保存できるため、Emacsが履歴の破棄を開始する前により多くの変更を蓄積できます。

37
Trey Jackson

redondo-tree 癖に注意してください!

多くの人気のある「スターターキット」(prelude、purcell、spacemacs)には、元に戻すツリーがバンドルされています。ほとんど(すべて?)前述のように、元に戻すツリーは、元に戻す/やり直しツリーを視覚化してトラバースする便利な方法です。 Preludeは、キーコード(uu)とC-x uも提供します。

問題は:undo-treeがredoのEmacsのデフォルトの既知のバインディングを破壊しているようだ:C-g C-/

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

C-/     undo
C-S-/   redo

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

15
Micah Elliott

私は redo.el極めて便利 を見つけます。これは「通常の」元に戻す/やり直しを行うためです。

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

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

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

10
monotux

最後の操作を元に戻す場合は、次の手順を実行します。

  1. ESC
  2. 別の元に戻す(C + /
0
dtypist