Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Smooth scrolling

Viewport scrolls slide instead of teleporting — neoscroll.nvim’s behavior, built into the core. It is on by default and needs no plugin.

When the viewport moves more than a step — <C-d>/<C-u>, <C-f>/<C-b>, the mouse wheel, or an off-screen jump like G/gg/a search — the editor emits a scroll descriptor (the from/to lines and a duration) and the client interpolates the slide locally over its own wall clock with an ease-out curve. Because the animation runs client-side, it stays smooth even over a slow remote daemon link, and any new keystroke interrupts the in-flight slide and snaps straight to the destination.

Single-line motions at the window edge, typing in insert/command mode, and edits that reflow the buffer are kept crisp — only genuine viewport jumps animate.

Options

OptionDefaultMeaning
'scrollanim'trueAnimate viewport scrolls. :set noscrollanim snaps every scroll.
'scrollanimduration'160The longest a slide may last, in milliseconds. The per-scroll duration scales with the travel distance and is clamped to this ceiling; 0 disables animation entirely.
nx.o.scrollanim = true
nx.o.scrollanimduration = 160   -- ms ceiling; raise for a slower, more visible slide

'scrollanim' is also a window-local option (nx.wo.scrollanim): nil inherits the global value, false forces this window’s scrolls to snap, and true forces the slide even when the global is off. A synced side-by-side diff sets it false on its panes so a mirrored scroll doesn’t desync.

See examples/smooth-scroll/ for a runnable demo.