この記事では、「元に戻すときに方向を逆にして、元に戻すことができるため、Emacsにはやり直しがあります」と書かれています。
これは何を意味するのでしょうか?ユーザーはどのようにしてEmacsで「やり直す」ことができますか?
ショートバージョン:元に戻すを元に戻す。元に戻した後、などの非編集コマンドを実行するとC-f、次の元に戻すと元に戻るが元に戻され、やり直しが行われます。
長いバージョン:
元にしいとは、操作のスタックを操作することと考えることができます。一連の取り消し操作の後に何らかのコマンド(などのナビゲーションコマンドもC-f)を実行すると、すべての取り消しが操作スタックにプッシュされます。したがって、次の元に戻すは最後のコマンドを元に戻します。次のような操作シーケンスがあるとします。
今、あなたは元に戻します。最後のアクションを元に戻し、次のリストになります。
この時点で元に戻す以外のことを行うと、たとえば、C-f操作スタックは次のようになります。
さて、元に戻すとき、最初に元にされるのは元に戻すことです。元のスタック(およびドキュメントの状態)が生成されます。
元に戻すシーケンスを中断するために変更コマンドを実行すると、そのコマンドは元に戻す後に追加されるため、後で最初に元に戻されます。を押す代わりに、「バー」の上にバックスペースしたとしますC-f。その後、あなたは持っていただろう
この追加/再追加は無限に行われます。慣れるのに少し時間がかかりますが、それは本当にEmacsに非常に柔軟で強力な元に/やり直しのメカニズムを与えます。
元に戻すには: C-_
元に戻す後にやり直すには: C-g C-_
複数回入力し C-_ て、元に戻されたこと C-_ をやり直しますemacsコマンドを複数回やり直すには、コマンドを実行してから入力C-xzし、キーを何度もz入力してコマンドを繰り返します(マクロを複数回実行する場合は興味深い)
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
。C-g
繰り返されないことに注意してください。C-g
C-/
C-g
C-/
C-/
最後の元に戻すコマンド以降にキーを押した場合(文字を入力する場合でも、カーソルを移動する場合でも)、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マニュアルの「元に戻す」を参照してください。
より一般的な元に/やり直し機能が欲しい人のために、誰かが書いていundo-tree.el
ます。これは、Emacs以外のアンドゥのルックアンドフィールを提供しますが、アンドゥ履歴の「ツリー」全体へのアクセスを提供します。
私はEmacsの組み込みのundoシステムが好きですが、このパッケージは非常に直感的であることがわかります。
ファイル自体からの解説は次のとおりです。
Emacsには強力な取り消しシステムがあります。ほとんどのソフトウェアの標準の元に戻す/やり直しシステムとは異なり、バッファの過去の状態を回復できます(一方、標準の元に戻す/やり直しシステムは、やり直すとすぐに過去の状態を失う可能性があります)。ただし、この能力には代償が伴います。多くの人は、Emacsの元に戻るシステムを混乱させて使いにくく、より強力ではないがより直感的な元にできる/やり直しシステムに置き換える多くのパッケージを生み出しています。
標準の元に戻る/やり直しによるデータの損失とEmacsの元に戻るの混乱の両方は、元に戻る履歴を変更の線形シーケンスとして処理しようとすることに起因します。そうではありません。このパッケージによって提供される`undo-tree-mode'は、Emacsのundoシステムを、undo履歴をそれが何であるか(変更の分岐ツリー)として扱うシステムに置き換えます。この単純なアイデアにより、標準の元に戻す/やり直しシステムのより直感的な動作と、履歴を失うことのないパワーを組み合わせることができます。追加の副次的なボーナスは、取り消し履歴をより効率的に保存できる場合があり、Emacsが履歴の破棄を開始する前に、より多くの変更を蓄積できることです。
やり直しのための元に木の癖に注意してください!
多くの人気のある「スターターキット」(プレリュード、パーセル、spacemacs)には、undo-treeがバンドルされています。ほとんど(すべて?)はそれを自動有効にします。前述のように、undo-treeは、undo/redoツリーを視覚化してトラバースするための便利な方法です。プレリュードはそれにキーコード(uu
)、そしてまたを与えC-x u
ます。
問題は次のとおりです。undo-treeはEmacsのデフォルトでよく知られているREDOのバインディングを破壊しているようです:C-g C-/
。
代わりに、これらの対称キーを元に/やり直しに使用できます。
C-/ undo
C-S-/ redo
ビジュアライザーを開かずにすばやくやり直したい場合があるため、これらは便利です。
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を参照してください)。
私は「通常の」元に戻る/やり直しを行うのに非常に便利だと思います。通常、次のように、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
。
デフォルトでは、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))
Doom Emacsユーザーの皆さん、ここまでスクロールしたか、ページで「doom」を検索したことを願っています...
C-g
C-/
C-/
C-/
etc(またはC-g
C-_
C-_
C-_
etc)...そして代わりにそれはただ元に戻し続けます。S-C-/
壊します: (AKA C-?
)...代わりに、「C-?isnotdefined」というエラーがスローされます。必要なものは次のとおりです。
C-z
の内外を切り替える)(悪モードでは、オレンジカーソルではなく青いカーソルが表示されるはずです)Esc
なく)(コマンドモードに切り替える)(ラインカーソルではなくブロックカーソルが表示されるはずです)、そしてそれはu
元に戻すとC-r
やり直し用最後の操作をやり直す場合は、次のようにします。
ESC
C + /
)