次: , 前: Marking Objects, 上: Mark


7.5 マークリング

マークには、リージョンを区切る以外にも、 あとで戻る可能性のある箇所を記録するという便利な使い方があります。 この機能をより便利にするために、 各バッファでは以前の16箇所のマーク位置を マークリング(mark ring)に記録しています。 マークを設定するコマンドは、古いマークをこのマークリングに入れます。 マークを設定していた箇所に戻るには、 C-u C-<SPC>(またはC-u C-@)を使います。 これは、set-mark-commandコマンドに数引数を指定したものです。 このコマンドは、マークがあった箇所にポイントを移動し、 それ以前のマークを収めたマークリングからマークを復元します。 したがって、このコマンドを繰り返すと、 マークリング上にある過去のマークのすべてを1つ1つ遡って移動できます。 このように辿ったマーク位置は、マークリングのうしろに付け加えられるので、 なくなってしまうことはありません。

各バッファには独自のマークリングがあります。 すべての編集コマンドは、カレントバッファのマークリングを使います。 特に、C-u C-<SPC>は、つねに同じバッファに留まります。

M-<beginning-of-buffer)のような長距離を 移動するコマンドの多くは、まずマークを設定して、 古いマークをマークリングに保存してから動作を開始します。 このようにして、あとで簡単に戻れるようにしておきます。 探索コマンドは、ポイントを移動するときにはマークを設定します。 コマンドがマークを設定したかどうかは、 エコー領域に`Mark Set'と表示されるのでわかります。

何度も同じ場所に戻りたい場合には、マークリングでは不十分でしょう。 このような場合には、あとで使うために位置情報をレジスタに記録できます (see RegPos)。

変数mark-ring-maxは、マークリングに保存する最大項目数を指定します。 すでに多くの項目が存在していて、さらにもう1つ押し込むときには、 リスト内の最古の項目を捨てます。 C-u C-<SPC>を繰り返し実行すると、 いまマークリングに入っている位置を巡回することになります。

変数mark-ringは、最新のマーカオブジェクトを先頭にして、 マーカオブジェクトのリストとしてマークリングを保持します。 この変数は各バッファにローカルです。