Next: Lossage, Previous: Customization, Up: Top [Contents][Index]
quit(中止): コマンドの実行、または途中までタイプしたコマンドをキャンセルします。
最内の再帰編集レベル(recursive editing
level)をabort(中断)して、それを呼び出したコマンドをキャンセルします(abort-recursive-edit
)。
quitまたはabortのどちらか、意味のあるほうを行ないます(keyboard-escape-quit
)。
現在実行中のすべての再帰編集レベルをabortします。
バッファー内容にたいする直前の変更をキャンセルします(undo
)。
完了する前のコマンドをキャンセルする方法は2つあります。それはC-gによるquitと、C-]やM-x top-levelによるabortです。quitは途中までタイプしたコマンド、または実行中のコマンドをキャンセルします。abortは再帰編集レベルを抜けて、再帰編集を呼び出したコマンドをキャンセルします(Recursive Editを参照してください)。
C-gによるquitは、途中までタイプしたコマンドから抜けたり、望まない数引数から抜け出す方法です。さらに、あるコマンドが実行中の場合、C-gは比較的安全にコマンドを停止します。たとえば、長い時間がかかるkillコマンドをquitした場合、すべてのテキストがバッファーに残るか、またはすべてのテキストがkillリングに残るか、もしかしたらその両方かもしれません。リージョンがアクティブの場合、Transient Markモードがオフでなければ、C-gはマークを非アクティブにします(Disabled Transient Markを参照してください)。インクリメンタル検索の途中では、C-gは特別に振る舞います。検索を抜けるには2回連続してC-gをタイプします。詳細は、Incremental Searchを参照してください。
MS-DOSでは、文字C-BreakがC-gのような文字の役割をします。MS-DOSではユーザーとの相互作用を行なうとき以外に、実行中のコマンドでC-gを認識できないのが理由です。それとは対照的に、C-Breakは常に認識できます。 MS-DOS Keyboardを参照してください。
C-gをタイプした瞬間に変数quit-flag
をt
にセットすることにより、C-gは機能します。Emacs
Lispはこの変数を頻繁にチェックして、これが非nil
のときはquitします。Emacsが入力待ちのときにタイプしたときだけ、C-gは実際にコマンドとして実行されます。この場合に実行されるコマンドは、keyboard-quit
です。
テキスト端末では、最初のC-gが認識される前に2回目のC-gでquitした場合は、emergency escape(緊急エスケープ)機能がアクティブになり、シェルに戻ります。Emergency Escapeを参照してください。
quitできない状況もいくつか存在します。Emacsがオペレーティングシステムが何か行なうのを待つような場合、待ちが発生する箇所で特定のシステムコールにたいして、Emacsが特別な対処をしない場合、quitは不可能です。ユーザーがquitしたいと望むようなシステムコールにたいして、わたしたちはこれを行なっていなすが、それでも処理できないケースに出会う場合もあります。とても一般的なケースの1つは、NFSを使用したファイルへの入出力待ちです。Emacs自体はquitする方法を知っていますが、多くのNFS実装は、NFSサーバーがハングしたとき、ユーザープログラムがNFSを待つのを止めることを、単に許していません。
C-]
(abort-recursive-edit
)によるabortは、再帰編集レベルを抜けて、それを呼び出したコマンドをキャンセルするのに使用されます。C-gによるquitはこれを行なわず、行なうこともできません。なぜならこれは再帰編集レベルの中で、途中までタイプされたコマンドをキャンセルするからです。どちらの操作も有用です。たとえば再帰編集中に、数引数を入力するためにC-u
8とタイプした場合、C-gでその引数をキャンセルして、その再帰編集レベルに留まることができます。
シーケンスESC ESC ESC
(keyboard-escape-quit
)は、quitかabortのどちらかを呼び出します(多くのPCプログラムでESCは“抜け出す”ことを意味するので、このような定義にしました)。これはC-gのように、プレフィクス引数のキャンセル、選択されたリージョンのクリアー、また問い合わせつき置換から抜け出すこともできます。またC-]のように、ミニバッファーから抜け出したり、再帰編集から抜け出すこともできます。これはC-x
1のように、フレームの複数ウィンドウ分割から抜け出すこともできます。これが行なうことができないのは、実行中のコマンドの停止です。これは通常のコマンドとして実行されるので、Emacsが次のコマンドのために準備ができるまで、これを認識しないからです。
コマンドM-x top-levelは、現在の再帰編集レベルからすべての再帰編集レベルを抜けるための、充分な回数のC-]コマンドと等価です。ミニバッファーがアクティブなときは、ミニバッファーも抜けます。C-]は、1度に1レベル再帰編集レベルを抜けますが、M-x top-levelは、1度ですべての再帰編集レベルを抜けます。C-]とM-x top-levelの両方とも、他のすべてのコマンドと同様(そしてC-gとは異なり)、Emacsがコマンドにたいして準備ができているときだけ効果があります。C-]は通常のキーで、このキーが意味をもつのは、それがキーマップでバインドされているときだけです。Recursive Editを参照してください。
厳密に言えばC-/
(undo
)はキャンセルコマンドではありませんが、すでに実行を終えたコマンドをキャンセルすると考えることができます。undo機能についての詳細は、Undoを参照してください。