再帰編集(recursive edit)とは,Emacsコマンドの実行中に,他
の編集を行なうために別のEmacsコマンドを使用する状況をいいます.たとえば,
query-replace
の中でC-rを入力すると,再帰編集になってカレン
トバッファを編集できます.再帰編集から抜けるとquery-replace
に戻り
ます.
再帰編集を終了するということは,まだ終了していないコマンドに戻っ
て実行を続けることを意味します.たとえば,query-replace
から
C-rによって呼び出された再帰編集を終了すると,query-replaceを再開し
ます.再帰編集の終了はC-M-c (exit-recursive-edit
)で行ないま
す.
再帰編集を中止することもできます.これは,終了とにていますが,未終了の
コマンドも中止するという点が異なります.このためのコマンドはC-]
(abort-recursive-edit
)です.See section 取りやめ(Quit)と中止(Abort).
再帰編集中であることはモード行の主モード,副モードを囲んでいるかっこの 外側にブラケットが表示されることでわかります.再帰編集は選択されているバッ ファによらず,Emacsすべてに関わるので,すべてのウィンドウのモード行でも 同じように表示されます.
再帰編集の中で,さらに再帰編集にはいることもできます.たとえば,
query-replace
でC-rを入力したあと,デバッガにはいるコマンド
を入力したとします.このような状況では,2つあるいはそれ以上のブラケット
がモード行に現われます.内側の再帰編集を終了する(たとえば,デバッガでは
cコマンド)と,デバッガが呼ばれたところで実行中だったコマンドを再開
します.このコマンドが終ると,最初の再帰編集を抜けることになるわけです.
中止の場合も,再帰編集を1レベルだけ抜ける,すなわち,前の再帰編集のコマ
ンドレベルに戻ることになります.そこでのコマンドも止めることができます.
以上のコマンドとは別に,コマンドM-x top-levelを使えば,再帰編集 の全レベルを止めて,即座にトップレベルのコマンドリーダーに戻ることができ ます.
内側の再帰編集で編集されているテキストは,トップレベルで編集されている テキストと同じものである必要はありません.再帰編集で何をするかによります. 再帰編集を呼び出したコマンドが最初に異なるバッファを選択するなら,それが 再帰編集を行なうバッファになります.いずれにせよ,再帰編集中でも,通常の 方法でバッファの切替ができます(バッファ切替のキーが再割当されていない限 り).おそらく,再帰編集中にはファイルの読み込みなどのあらゆる編集ができ るはずです.しかし,その結果にはときどき驚かされるでしょう(スタックのあ ふれの発生など).したがって,必要がなくなったら,再帰編集は終了するか中 止するように心がけましょう.
一般に,GNU Emacsでは,再帰編集を使用しないようにしています.通常は, 利用者が好きな順に編集モードを切替えられるようにするのがよいからです.再 帰編集では,別の状態へ移るとは,再帰編集を呼び出した状態へ戻ることを意味 します.