各バッファは、マークリングにマークの以前の位置を記録しています。マークを設定するコマンドは、古いマークもこのリングにプッシュします。マークリングの用途の一つは、戻りたい箇所を記憶しておくことです。
マークを、作動させずにマークリングに押し当ててセットしてください。
ポイントをマークがあった位置に移動し、過去のマークの輪からマークを復元する。
コマンド C-SPC C-SPC
は、マークを使って戻りたい位置を記憶しておきたい場合に便利です。これは、マークを有効にすることなく(有効にすると Emacs
がリージョンをハイライトします)、現在のポイントをマークリングにプッシュします。これは実際には C-SPC (set-mark-command)
を2回連続して呼び出したものであり、1回目の C-SPC
でマークを設定し、2回目の C-SPC
でそれを無効にします。(一時マークモードがオフの場合、C-SPC
C-SPC は代わりに一時マークモードを一時的に有効にします。一時マークモードの無効化 を参照してください。)
マークした位置に戻るには、接頭辞引数を指定して set-mark-command
を使用します:C-u C-SPC。これによりポイントがマークされていた位置に移動し、マークが有効だった場合は無効になります。その後の
C-u C-SPC
は、マークリングに保存されている前の位置へとジャンプします。このように移動した位置は失われず、リングの末尾へと移動します。
set-mark-command-repeat-pop に nil 以外を設定すれば、C-u C-SPC と入力した直後に、C-u C-SPC の代わりに C-SPC と入力してマークリングを循環させることができます。デフォルトでは、set-mark-command-repeat-pop は nil となっています。
各バッファには独自のマークリングがあります。すべての編集コマンドは、現在のバッファのマークリングを使用します。特に、C-u C-SPCは常に同じバッファ内に留まります。
変数 mark-ring-max
は、マークリングに保持するエントリの最大数を指定します。デフォルトは16エントリです。これだけの数のエントリが存在し、さらに別のエントリがプッシュされると、リストの中で最も古いエントリが破棄されます。C-u C-SPC
を繰り返すと、現在リング内にある位置を順に巡回します。
同じ場所に何度も戻りたい場合、マークリングでは不便かもしれません。その場合は、後で参照できるようにレジスタに位置を記録しておくことができます(レジスタへの位置の保存を参照)。