numbers.vim
August 1, 2026 ยท View on GitHub
numbers.vim is a plugin for intelligently toggling line numbers.
This plugin alternates between relative numbering (relativenumber) and
absolute numbering (number) for the active window depending on the mode
you are in. In a GUI, it also functions based on whether or not the app has
focus.
Numbers go absolute while you are in insert mode, while you are typing an Ex
command (so the line in :14y can be read off the gutter), in inactive
windows, and while the editor is unfocused. They are relative the rest of the
time.
Commands are included for toggling the line numbering method and for enabling and disabling the plugin.
Requirements
- Vim 7.3+
Installation
Using pathogen or vundle for installation is recommended.
For pathogen users, clone the repo:
git clone https://github.com/myusuf3/numbers.vim.git ~/.vim/bundle/numbers
For vundle users, add the following to your .vimrc and then run
a :BundleInstall:
Bundle "myusuf3/numbers.vim"
Numbers Don't Belong
If you see numbers where they don't belong like in the help menus or other vim plugins be sure to add the filetypes used by your plugins to the excludes list in your vimrc like so
let g:numbers_exclude = ['tagbar', 'gundo', 'minibufexpl', 'nerdtree']
The plugin by default contains the following:
let g:numbers_exclude = ['unite', 'tagbar', 'startify', 'gundo', 'vimshell', 'w3m', 'nerdtree', 'Mundo', 'MundoDiff', 'buffergator', 'easybuffer']
So be sure to include the superset in your vimrc or gvimrc
Plugin windows often leave filetype empty, which puts them out of reach of
that list. Those are excluded by buftype instead, which by default covers
every special buffer kind:
let g:numbers_exclude_buftypes = ['acwrite', 'help', 'nofile', 'nowrite', 'popup', 'prompt', 'quickfix', 'terminal']
Shorten that list if you want line numbers back in one of those windows.
Usage
Once installed, no action is required on your part. But for convenience, you
may want to add mappings in your .vimrc for some of the commands, e.g.,
nnoremap <F3> :NumbersToggle<CR>
nnoremap <F4> :NumbersOnOff<CR>
Vim 7.4
If you are lucky enough to be a Vim 7.4 user, you may experience unexpected
behaviour if set number is not present in your ~/.vimrc.
VSCode
Under the vscode-neovim extension the plugin disables itself. VSCode draws
its own gutter, so switching number and relativenumber in Neovim has no
effect on screen there, and it used to shift the cursor several columns to the
right when entering insert mode.
VSCode has the same feature built in:
"editor.lineNumbers": "relative"
Tests
./test/run.sh # every case, against both vim and neovim
./test/run.sh toggle # a single case
Each case in test/cases/ runs in its own editor process and asserts on
number and relativenumber. Editors that are not installed are skipped. CI
runs the same script.