GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Scrolling.html ・ emacs-doc.conao3.com

16.1 スクロール

ウィンドウが小さすぎてバッファ内のテキストをすべて表示できない場合、その一部のみが表示されます。スクロールコマンドは、バッファのどの部分を表示するかを変更します。

前方または上方向にスクロールすると、ウィンドウに表示されるバッファの部分が進みます。言い換えれば、バッファのテキストがウィンドウに対して上方に移動します。後方または下方向にスクロールすると、バッファのより前の部分が表示され、テキストがウィンドウに対して下方に移動します。

Emacsにおいて、「上にスクロール」または「下にスクロール」とは、ウィンドウ内でテキストが移動する方向を指し、テキストに対してウィンドウが移動する方向を指すのではありません。この用語法は、「上にスクロール」や「下にスクロール」という現代的な意味が普及する前にEmacsで採用されたものです。そのため、PageDownがEmacs的な意味で「上にスクロールする」という奇妙な結果になります。

ウィンドウに表示されるバッファの領域には、常にポイントが含まれます。ポイントをウィンドウの下端または上端より外側に移動させると、自動的にスクロールが行われ、ポイントが再び画面内に表示されます(自動スクロールを参照)。また、以下のコマンドを使用して明示的にスクロールすることも可能です。

C-v
PageDown
next

ウィンドウ1つ分近く前方にスクロールする (scroll-up-command)。

M-v
PageUp
prior

後方にスクロール (scroll-down-command)。

C-v (scroll-up-command) は、ウィンドウの高さのほぼ全域分、前方にスクロールします。これにより、ウィンドウ下部の2行が上部に移動し、それまで見えていなかった行がそれに続きます。テキスト内の位置がスクロールで上部から外れた場合、その位置はウィンドウの新しい最上行に配置されます。PageDown (または next) キーは C-v と同等です。

M-v (scroll-down-command) も同様に後方にスクロールします。PageUp (または prior) キーは M-v と同等です。

これらのスクロールコマンドによって残るオーバーラップ行数は、デフォルト値が 2 の変数 next-screen-context-lines で制御されます。コマンドに数値の接頭辞引数 n を指定すると、n 行分スクロールできます。Emacs はポイントを変更せずに維持しようとするため、テキストとポイントが連動して上下に移動します。負の引数を指定した C-v は M-v と同様であり、その逆も同様です。

デフォルトでは、これらのコマンドは、ウィンドウがバッファの先頭または末尾に達したためこれ以上スクロールできない場合、エラーを通知します(ビープ音を鳴らすか、画面を点滅させます)。変数 scroll-error-top-bottom を t に変更すると、これらのコマンドはポイントを可能な限り遠い位置に移動させます。ポイントがすでにその位置にある場合、これらのコマンドはエラーを通知します。

ポイントを同じ画面位置に保持し、スクロールコマンドで元の画面に戻った際に便利にポイントを元の位置に戻せるようにしたいユーザーもいます。この動作は、変数 scroll-preserve-screen-position で有効にできます。値が t の場合、スクロールコマンドによってカーソルがウィンドウ外に移動しても、Emacs はカーソルを最上行や最下行に移動させるのではなく、同じ画面位置に保持するようにポイントを調整します。nil 以外の値の場合、スクロールコマンドによってポイントがウィンドウ内に留まったとしても、Emacs はこの方法でポイントを調整します。この変数は、本セクションで説明されているすべてのスクロールコマンドに加え、マウスホイールによるスクロール(編集用マウスコマンド を参照)にも影響します。一般的に、nil または scroll-command 以外のプロパティを持つあらゆるコマンドに影響します。The Emacs Lisp Reference Manual の プロパティリスト を参照してください。また、同じプロパティにより、これらのコマンドのいずれかが呼び出され、かつ isearch-allow-scroll が nil 以外である場合、Emacs はインクリメンタルサーチを終了しなくなります(インクリメンタルサーチを終了しない を参照)。

特に C-v や M-v といったキーを押し続けてキーボードの自動リピートを有効にした場合、Emacs が要求された高速なスクロール速度に追いつかず、表示が更新されず、かなり長い間入力に反応しなくなることがあります。このもたつきは、変数 fast-but-imprecise-scrolling に nil 以外の値を設定することで解消できます。これにより、スクロールコマンドは、スクロールして通過する未フォント化テキストをフォント化(Font Lock モード を参照)せず、代わりにデフォルトのフェイスであるとみなすようになります。このため、使用しているフェイスのサイズがすべて同一でない場合、単一の(つまり自動リピートなしの)スクロール操作であっても、Emacs がわずかに誤ったバッファ位置までスクロールすることがあります。

fast-but-imprecise-scrolling を設定する代わりに、jit-lock による遅延フォント化を有効にすることもできます(Font Lock モード を参照)。これを行うには、jit-lock-defer-time を 0.25 などの小さな正の数、あるいはタイピングが速い場合は 0.1 にカスタマイズしてください。これにより、C-v を押し続けている際のスクロールのカクつきが軽減されますが、バッファの新しい領域にスクロールさせる操作を行った後のウィンドウ内容は、一時的にフォント化されていない状態になります。

最後に、これらの変数に代わる3つ目の選択肢として redisplay-skip-fontification-on-input があります。この変数が nil 以外の場合、入力待ちの状態であれば一部のフォント化処理をスキップします。入力待ちであればどのみち再表示は完全にスキップされるため、通常は表示に影響しませんが、不要なフォント化を避けることでスクロールをよりスムーズにできます。

コマンド M-x scroll-up と M-x scroll-down は、scroll-error-top-bottom に従わない点を除けば、scroll-up-command や scroll-down-command と同様に動作します。Emacs 24 より前では、これらは上下スクロールのデフォルトコマンドでした。コマンド M-x scroll-up-line と M-x scroll-down-line は、現在のウィンドウを1行ずつスクロールします。これらのコマンドのいずれかを使用する場合は、キーバインドを設定するとよいでしょう(初期化ファイルでのキー再バインド を参照してください)。

グラフィカルディスプレイでは、スクロールバーを使ってウィンドウをスクロールすることもできます。スクロールバーを参照してください。