# nvim-scrollview adds a draggable scrollbar and sign column to Neovim

> nvim-scrollview is a Neovim plugin that renders a vertical scrollbar next to the buffer plus a column of signs for diagnostics, search, folds and a dozen other groups, and the scrollbar can be dragged with the mouse.

**dstein64/nvim-scrollview** — A Neovim plugin that displays interactive vertical scrollbars and signs.

- Repository: https://github.com/dstein64/nvim-scrollview
- Stars: 705 · Forks: 14
- Language: Lua
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/dstein64-nvim-scrollview

## A scrollbar and a sign column drawn in a floating window

The problem is that a long buffer in a terminal editor gives you almost no positional feedback. You can see the cursor line, but not the shape of the document, not where the errors are, and not where your last search landed. nvim-scrollview is a Neovim plugin that displays interactive vertical scrollbars and signs. The mechanism is a floating window beside the buffer that renders two things: a scrollbar showing where you are in the file, and a sign column where each line can carry a small marker for a category of information. The README states the plugin works automatically, displaying interactive scrollbars, with no command needed to start it, and that the whole thing is customizable through the help topic scrollview-configuration.

## Fourteen sign groups, two of them on by default

The sign column is where most of the value sits, and the built-in list is long. It covers changelist items for the previous, current and next changes, git merge conflicts, cursor position, diagnostics covering errors, warnings, info and hints, closed folds, unexpected indentation characters such as tabs when expandtab is set, keywords like FIX, FIXME, HACK, TODO, WARN, WARNING and XXX, the latest change, location list items, marks, quickfix list items, search matches, spell check items when the spell option is enabled, line lengths exceeding the textwidth option when it is non-zero, and trailing whitespace. Only search and diagnostics are enabled by default, with marks added too for nvim 0.10 and later. The sign logic is deliberately similar to Neovim's own sign column, but positioned with the same logic as the scrollbar, which is what makes the two read as one piece of furniture rather than two.

## Mouse drag and click navigation, with a hover highlight

Interactivity is the part that separates this from a static minimap. The scrollbars can be dragged with the mouse, and signs can be clicked for navigation or right-clicked for information. Clicking a sign navigates to its associated line, and if a sign is linked to multiple lines, successive clicks cycle through them, which matters for a diagnostics sign attached to a whole range. Right-clicking reveals additional information, including the sign group and the corresponding lines, and the lines can be selected for navigation, so you can identify what a marker means if you are not sure. The README also notes that if mousemoveevent is set, scrollbars and signs are highlighted when the mouse pointer hovers, which is a small touch that makes the mapping between the marker and its meaning much easier to learn.

## Commands for toggling, refreshing and jumping

The command set is thorough, and one command in it reveals a design decision worth knowing about. There is :ScrollViewDisable, :ScrollViewEnable and :ScrollViewToggle, and each accepts sign group names as arguments, so you can disable or enable specific groups rather than the whole plugin. :ScrollViewRefresh redraws the scrollbars and signs, and the README is explicit about why you would need it: some window arrangement actions leave the scrollbars or signs out of sync, so the refresh is the escape hatch rather than a routine command. For navigation there is :ScrollViewNext, :ScrollViewPrev, :ScrollViewFirst and :ScrollViewLast, which move the cursor to lines with signs, and the arguments can specify which sign groups are considered. :ScrollViewLegend shows a legend, and its bang variant includes the scrollbar and all registered signs even from disabled groups, regardless of their display status.

## Installing through whichever plugin manager you already run

The installation section is a list of one line recipes for the managers in common use, which is the right approach for a plugin this small. The README gives a Vim8 packages clone into the site pack directory, a Vundle line plus :PluginInstall, a Pathogen clone with depth 1, a vim-plug entry with the branch set to main, a dein.vim call plus :call dein#install(), a NeoBundle line plus sourcing the init file, a packer.nvim use line plus :PackerInstall, and for lazy.nvim a plugin spec with opts. The plugin manager for lazy.nvim is worth noting because it is the one that shows the configuration shape, since the options table is a nested table rather than a flat list of global variables.

## Configuration as global variables or through a setup() call

There are two ways to configure the plugin, and the README shows both. The Vimscript way sets global variables with a scrollview prefix:```vim
let g:scrollview_excluded_filetypes = ['nerdtree']
let g:scrollview_current_only = v:true
" Position the scrollbar at the 80th character of the buffer
let g:scrollview_base = 'buffer'
let g:scrollview_column = 80
" Enable all sign groups (defaults to ['diagnostics', 'search']).
" Set to the empty list to disable all sign groups.
let g:scrollview_signs_on_startup = ['all']
" Show diagnostic signs only for errors.
let g:scrollview_diagnostics_severities =
      \ [luaeval('vim.diagnostic.severity.ERROR')]
``` and the example shows excluded_filetypes for a plugin like nerdtree, current_only, base set to buffer so the scrollbar is positioned relative to the buffer rather than the window, column set to 80 to place the scrollbar at the 80th character, signs_on_startup set to all to enable every sign group, and diagnostics_severities restricted to errors. The Lua way calls a setup() function with the same names minus the prefix:```lua
require('scrollview').setup({
  excluded_filetypes = {'nerdtree'},
  current_only = true,
  base = 'buffer',
  column = 80,
  signs_on_startup = {'all'},
  diagnostics_severities = {vim.diagnostic.severity.ERROR}
``` The README also says configuration variables can be set without calling setup(), by assigning them to vim.g directly. The base setting is the one that changes the character of the plugin, since it decides whether the scrollbar measures the buffer or the window.

## Extending the sign groups yourself

The plugin was written so that the sign functionality can be extended in a Neovim configuration file or with another plugin, and the documentation covers the details. Alongside the built-in groups there is a contrib directory in the source tree, lua/scrollview/contrib, holding sign group implementations that are not built-in, with coc and gitsigns given as the examples. The README is careful about the status of that directory: the code there does not receive the same level of support as the main source code and may be less stable, and the advice is to use it at your own risk. That distinction is worth respecting, since contrib is where a sign group is most likely to break against a Neovim release, and it is also the place where you would add a group of your own if you wanted one that the project does not ship.

## Conclusion

nvim-scrollview suits a Neovim user with long files who wants to see where the diagnostics and search matches are without leaving the buffer, and who wants the extra visual detail alongside the buffer. It does not suit someone working over a slow SSH link or on a very large file, where the scrollbar offers less value, and it does not suit a setup without mouse support, since the drag interaction needs it. Before adopting, set scrollview_signs_on_startup to the groups you actually want rather than all of them, check the plugin's minimum Neovim version, and note that the last push to the repository was on 2026-08-10 with release v6.3.0 dated 2026-02-04.

## FAQ

### How do I install nvim-scrollview?

The README gives one line recipes for several managers, including a packer.nvim use line plus :PackerInstall, a lazy.nvim plugin spec with opts, a Vundle or vim-plug entry with :PluginInstall, and a Vim8 packages clone. The plugin requires nvim 0.6 or newer, signs need nvim 0.9 or newer, and mouse features need mouse support.

### Which sign groups are enabled by default in nvim-scrollview?

The search and diagnostics groups are enabled by default, and marks is added too for nvim 0.10 and newer. You can change this with the scrollview_signs_on_startup setting, set to all to enable everything, or per group with :ScrollViewEnable and :ScrollViewDisable in the current session.

### How do I configure nvim-scrollview in Lua?

Call the setup function provided by the plugin, with the scrollview prefix omitted, for example require('scrollview').setup({ excluded_filetypes = {'nerdtree'}, current_only = true, base = 'buffer', column = 80, signs_on_startup = {'all'}, diagnostics_severities = {vim.diagnostic.severity.ERROR}}). Configuration variables can also be assigned to vim.g without calling setup.

### Why did my nvim-scrollview scrollbar get out of sync?

The README says some window arrangement actions can leave the scrollbars or signs out of sync, and that :ScrollViewRefresh is the command to fix that. Navigation to signs is available through :ScrollViewNext, :ScrollViewPrev, :ScrollViewFirst and :ScrollViewLast, with arguments to pick which sign groups are considered.

### Can I add my own sign group to nvim-scrollview?

Yes. The plugin was written so the sign functionality can be extended in a Neovim configuration file or with another plugin, and the contrib directory at lua/scrollview/contrib holds sign group implementations that are not built-in, with coc and gitsigns as examples. The README notes that contrib code gets less support than the main source and may be less stable.

## Sources

- [dstein64/nvim-scrollview on GitHub](https://github.com/dstein64/nvim-scrollview)
- [Issues](https://github.com/dstein64/nvim-scrollview/issues)
- [License: MIT](https://github.com/dstein64/nvim-scrollview/blob/main/LICENSE)
- [README](https://github.com/dstein64/nvim-scrollview/blob/main/README.md)
- [Releases](https://github.com/dstein64/nvim-scrollview/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/dstein64-nvim-scrollview
