Emacs におけるスクロールの挙動とその設定

Emacs ではデフォルトのままだとスクロールする時、ガクガクと動く感じがします。 その調整も含めて、今回は Emacs でのスクロールの挙動とその変更方法について説明します。

カーソル移動によるスクロール

なぜ、ガクガクとスクロールする感じになるかというと、 Emacs では画面端になって、スクロールする際に、 画面中央にカーソルがくるようにするためです。

emacs_scroll_step.png

これはこれで、なるべく画面の中央で編集ができるため、良い点もあります。 ただ、 Word など他のアプリと挙動が違うので、ちょっと気持ち悪く感じます。

ステップ量

中央に移動する挙動を変えるには scroll-conservatively の値を変更します。
この値のデフォルトは 0 であり、これを 1 にすると、 スクロールは 1 行となり、自然な感じになります。
(setq scroll-conservatively 1)
ちなみに、scroll-step の変数でも同じように変わりますが、 scroll-conservatively の方が新しく用意されたもので、大きな値などにも対応しており、よりよいです。

マージン

一行ずつスクロールするようになると、書き続けるうちに画面の下の方ばかりで編集することになることがあります。 見づらいですが、そういうものといえばそういうものですし、 C-l で中央にカーソルを持ってくることもできます。


ただ、 Emacs にはスクロールのマージンを指定する機能もあり、 これを設定すると画面の端に到達する前に画面をスクロールできるようになります。
(setq scroll-margin 5)
emacs_scroll_margin.png

1 画面のスクロール

1 画面のスクロールというのは C-vM-v によるページダウン、ページアップのことです。

重複行数

ページをスクロールする際、移動をわかりやすくするため、ちょっと重複するようになっています。 特にターミナルで動作させている時など、この重複は大事です。

この値は next-screen-context-lines で設定し、デフォルトは 2 です。
(setq next-screen-context-lines 5)
emacs_scroll_duple.png

カーソル位置の保持

scroll-preserve-screen-position の変数に t を設定すると ページスクロール時に画面上におけるカーソルの位置をなるべく変えないようにします。
(setq scroll-preserve-screen-position t)
emacs_scroll_conpos.png

他のアプリなどでは保持することが多いので、 どちらかというと設定しておいた方が自然かなという気がします。

マウスホイール

最近では Emacs でもデフォルトでマウスのホイールによるスクロールができるようになっています。
ただ、他のアプリではホイールでスクロールするとカーソルは移動せずにスクロールするものですが、 Emacs のスクロールはカーソルありきの移動です。 どちらが良い悪いとも言えませんが、同じような感じにすることはできません。 そのかわりといっては何ですが、 Emacs ではターミナルでさえ、ホイールスクロールが使えるようになっています。


ホイールスクロールに関しては、設定する必要はあまりありませんが、 Emacs では ShiftCtrl を押しながら、 ホイールした時のスクロール量の調整などもできるようになっています。
 ;; マウスホイールによるスクロール時の行数
 ;;   Shift 少なめ、 Ctrl 多めに移動
 (setq mouse-wheel-scroll-amount
       '(5                              ; 通常   (デフォルト 5)
        ((shift) . 1)                   ; Shift  (デフォルト 1)
        ((control) . 40)                ; Ctrl   (デフォルト nil = 無効)
        ))

設定用コード

init.el ファイルの記述用に設定をまとめてみました。
 ;; スクロールした際のカーソルの移動行数
 (setq scroll-conservatively 1)
 
 ;; スクロール開始のマージンの行数
 (setq scroll-margin 10)
 
 
 ;; 1 画面スクロール時に重複させる行数
 (setq next-screen-context-lines 10)
 
 ;; 1 画面スクロール時にカーソルの画面上の位置をなるべく変えない
 (setq scroll-preserve-screen-position t)
 
 
 ;; マウスホイールによるスクロール時の行数
 ;;   Shift 少なめ、 Ctrl 多めに移動
 (setq mouse-wheel-scroll-amount
       '(5                              ; 通常
        ((shift) . 1)                   ; Shift
        ((control) . 40)                ; Ctrl
        ))
関連記事
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
114位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
15位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

12月 | 2025年01月 | 02月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。