Quit: 実行中のコマンド、または入力途中のコマンドをキャンセルします。
最内層の再帰的編集レベルを中止し、それを呼び出したコマンドを取り消す (abort-recursive-edit)。
終了するか中断するか、いずれか適切な方を (keyboard-escape-quit)。
現在実行中の再帰的な編集レベルをすべて中止する。
バッファ内容に対して以前に行った変更を取り消します (undo)。
コマンドが完了する前にキャンセルする方法には、C-g による 終了 と、C-] または M-x top-level による 中断 の2通りがあります。終了は、一部入力済みのコマンドや実行中のコマンドをキャンセルします。中断は、再帰的な編集レベルを終了し、その再帰的編集を呼び出したコマンドをキャンセルします(再帰的な編集レベル を参照)。
C-g で終了すると、部分的に入力されたコマンドや、不要な数値引数を取り除くことができます。さらに、実行中のコマンドの途中で C-g を使用すると、比較的安全な方法でコマンドを停止できます。例えば、時間のかかっている kill コマンドの途中で終了した場合、テキストは すべて バッファに残るか、あるいは すべて kill ring に残るか、もしくはその両方になります。リージョンがアクティブな場合、一時マークモードがオフでない限り、C-g はマークを無効にします(一時マークモードの無効化 を参照)。インクリメンタル検索の途中で C-g を使用すると特殊な動作となり、検索を終了するには C-g を2回連続して入力する必要がある場合があります。詳細は インクリメンタル検索 を参照してください。
ミニバッファに C-g
と入力すると、そのミニバッファを開いたコマンドが終了し、ミニバッファが閉じられます。そのミニバッファが直近に開いたものではない場合(minibuffer-follows-selected-frame が nil である場合などに起こり得ます(ミニバッファの使用 を参照))、C-g
は確認を求めた上で、より最近に開いたミニバッファも閉じ、それらに関連付けられたコマンドを終了させます。
MS-DOSでは、文字 C-Break は C-g と同様に終了文字として機能します。その理由は、MS-DOSにおいて、コマンドの実行中、ユーザーとのやり取りの合間に C-g を認識することは現実的ではないためです。対照的に、C-Break を常時認識することは可能です。MS-DOSでのキーボード操作を参照してください。
C-g は、C-g が入力された瞬間に変数 quit-flag に t
を代入することで動作します。Emacs Lisp はこの変数を頻繁にチェックし、値が nil
以外であれば終了します。C-g が実際にコマンドとして実行されるのは、Emacs
が入力を待機している間にそれを入力した場合のみです。その場合、実行されるコマンドは keyboard-quit となります。
テキスト端末において、最初の C-g が認識される前に2回目に C-g で終了すると、緊急脱出機能が作動し、シェルに戻ります。緊急脱出 を参照してください。
終了できない状況がいくつかあります。Emacsがオペレーティングシステムの動作を待機している場合、待機が発生しているEmacs内の特定のシステムコールに対して特別な対策を講じない限り、終了することは不可能です。ユーザーが終了を希望する可能性が高いシステムコールについてはこうした対策を講じていますが、対応していないケースに遭遇する可能性があります。非常によくある例――NFSを用いたファイルの入出力待機――では、Emacs自体は終了方法を把握していますが、多くのNFS実装では、NFSサーバーがハングアップしている際にユーザープログラムがNFSの待機を停止することを単純に許可していません。
C-] (abort-recursive-edit)
による中断は、再帰的な編集レベルから抜け出し、それを呼び出したコマンドをキャンセルするために使用されます。C-g による終了はこの動作を行わず、また行うこともできません。なぜなら、これは再帰的な編集レベル内で、部分的に入力されたコマンドをキャンセルするために使用されるからです。どちらの操作も有用です。例えば、再帰的な編集中で数値引数を入力するために
C-u 8 と入力した場合、C-g
でその引数をキャンセルし、再帰的な編集状態を維持することができます。
シーケンス ESC ESC
ESC (keyboard-escape-quit)
は、終了または中断のいずれかが可能です。(多くのPCプログラムにおいて ESC
が「終了」を意味するため、このように定義しました。)また、C-g
のように、プレフィックス引数をキャンセルしたり、選択範囲をクリアしたり、クエリ置換を終了したりすることもできます。C-] のように、ミニバッファや再帰的な編集を終了することも可能です。さらに、C-x 1
のように、フレームを複数のウィンドウに分割する処理を終了することもできます。ただし、実行中のコマンドを停止させることはできません。これは、そのコマンドが通常のコマンドとして実行され、Emacs
が次のコマンドの準備が整うまでそれを認識しないためです。
コマンド M-x top-level は、現在いる再帰編集のすべてのレベルから抜けるのに十分な数の C-] コマンドを実行するのと同等であり、ミニバッファがアクティブな場合はそこからも抜けます。C-] は1レベルずつ抜けますが、M-x top-level はすべてのレベルを一度に抜けます。C-] と M-x top-level はどちらも他のコマンドと同様であり、C-g とは異なり、Emacs がコマンドを受け付けられる状態になったときにのみ有効になります。C-] は通常のキーであり、キーマップにおけるバインドによってのみ意味を持ちます。再帰編集レベル を参照してください。
C-/ (undo)
は、厳密に言えばコマンドを取り消す方法ではありませんが、すでに実行が完了したコマンドを取り消すものと考えることができます。取り消し機能の詳細については、Undo を参照してください。