VSCodeではsticky scroll が有効になっている。
Emacsで「ほぼ」同様の機能を実現するには
- window-stool-modeをインストールし、有効にする
のが一番良さそうである。設定はこんな感じ(主にpython向け):
(add-hook 'emacs-startup-hook #'(lambda () (add-hook 'prog-mode-hook #'window-stool-mode) (setq window-stool-n-from-top 2) (setq window-stool-n-from-bottom 0) ))
類似のパッケージは
- topsyをインストールし、
topsy-modeを有効にする qiita.com
もしくは
breadcrumb-mode をインストールし、有効にする
scroll-conservativelyを1に設定する
ちなみにbreadcrumb-modeの設定:
(breadcrumb-mode +1) ;; 画面の下端で「↓向きに1行移動」したり,上端で「↑向きに1行移動」したりしたときの自動スクロール量を1に設定する. ;; デフォルトは0(無効値)で,半画面分(ウィンドウ高さの50%)自動スクロールする動作になる。 ;; 厳密に説明すると、ここで指定した行数だけ移動すると(goto-lineなどの長距離移動を含む)、リセンタリングが発生する。 ;; 1に設定すれば、C-nやC-pでの移動ではリセンタリングは発生しないというわけである。 (setq scroll-conservatively 1) ;; また十分大きな値(> 100)にすることで、 ;; goto-lineなどによるカーソルの長距離移動を含めてリセンタリングを事実上OFFにできる。 ;; どちらが良いかはお好みで。 ;; (setq scroll-conservatively 101)
topsyとbreadcrumb-mode、いずれも頭出しの関数名までが表示される。後者は引数を含めた情報までスクロールされない。ゆえに「ほぼ同様」のsticky scroll もどき、といったわけである。
カーソルに追従するスクロールの挙動をVSCodeにさらに近づけてみたい場合は以下の設定を試してみるのも良い。
;; スクロールのマージン ;; 画面スクロールにあたり、ウィンドウの高さがこの行数だけ小さくなるとみなす (setq scroll-margin 3)
スクロールの挙動/設定について解説した記事は以下:
scroll-marginについて説明した記事は以下: