How to scroll line by line in GNU Emacs?

Solution 1:

See some of the suggestions on the Emacs Wiki:

  • Emacs Wiki: Smooth Scrolling
(setq scroll-step            1
      scroll-conservatively  10000)

Solution 2:

If you want to position the screen exactly, you can use Ctrl-L.

  • By default it positions the current line in the middle of the screen.

  • ESC 0 Ctrl-L positions the current line at the top.

Solution 3:

I'm a bit late to the party, but if you don't mind installing a package then smooth-scrolling (github, also available in MELPA) may be what you're looking for - it certainly works for me.

Once you've installed it you can pop the following in your init.el:

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

The last line is optional; it starts scrolling near the screen edge rather than at it, so you've always got a little context around the point. Adjust to taste.

Solution 4:

My solution is not to change Emac's default scrolling, but rather to create a key sequence command from a macro. This way you have a convenient way to scroll one line at a time when you want. Not ideal, but super easy. It just happens that M-(↓) and M-(↑) are available, so that's what I used.

This is how I did it. First, you need to record a macro for one line scrolls, up and down.

Begin macro

C-x ( 

Scroll down one

C-u 1 C-v

Stop macro

C-x )

For scroll up one, use

C-u 1 M-v

Next you need to name the macro.

M-x name-last-kbd-macro

Give it a name when prompted like:

down-one-line

Then just use the following to bind a key sequence to that command name:

M-x global-set-key

And upon prompting, use something like:

M-(down arrow)

Then it will ask you which command you want to bind, and you should give it the name you invented earlier, e.g., down-one-line.

Here is where I got this information. You can also find instructions below and elsewhere about adding your macro to the .emacs file.

Here for macro definition explanation

Here for how to control scrolling