A ChangeLog for Vim

By Martin Tournoij | Source | Support my work

Get notified of updates by watching the GitHub project or subscribing to the commit feed.

This doesn't list all changes, just the most useful and notable ones.
Changes from Vim 8.0 (September 2016) up to 8.2.0000 (Dec 12 2019) are listed.

Compatibility table
Ubuntu 19.04Vim 8.1.0320Neovim 0.3.4
Ubuntu 18.10Vim 8.0.1766Neovim 0.3.1
Ubuntu 18.04 LTSVim 8.0.1453Neovim 0.2.2
Ubuntu 16.04 LTSVim 7.4.1689(no package)
Debian 9Vim 8.0.0197Neovim 0.1.7
Debian 10Vim 8.1.0875Neovim 0.3.4
Debian and Ubuntu are the most common distros with old Vim versions.


rand() and srand()

8.1.2342, 8.1.2343 (Nov 26)

Generate random numbers.


8.1.2341 (Nov 25)

Abort a running script.


8.1.2326 (Nov 21)

Parse a time string

:term ++shell

8.1.2251, 8.1.2255 (Nov 4)

Run :term commands in the shell.


8.1.2233 (Oct 29)

Get commandline arguments Vim was invoked with.

Add gM

8.1.2231 (Oct 28)

Move to middle of line.

hl-LineNrAbove, hl-LineNrBelow

8.1.2229 (Oct 27)

Highlight line numbers above and below the cursor when 'relativenumber' is set.

border and align in 'completepopup'

8.1.1902, 8.1.1904 (Aug 21)

More option to control completion popup menu.

popup in 'completeopt'

8.1.1880, 8.1.1882 (Aug 18)

Show extra completion info in popup window (as an alternative to the preview window).


8.1.1838 (Aug 11)

Mark words as rare in the spellfile.

-> operator

8.1.1803, 8.1.1809, 8.1.1834, 8.1.1835, 8.1.1996 (Sep 6)

expr->fun(args) is a shortcut for fun(expr, args) to improve readability:
[1, 2]->map({_, v -> v + 1}). See method.

Popup windows

8.1.1364, 8.1.1391, 8.1.1799, 8.1.1905, 8.1.1928 (Aug 25)

Popup windows are like the completion window, but can be controlled in VimScript to a much greater degree. See popup, 'previewpopup'. This is still an experimental feature.


8.1.1769 (Jul 28)

Override 'shellslash' for completion.

#{} dict notation

8.1.1683, 8.1.1692, 8.1.1705 (Jul 16)

The #{} notation is the same as the regular {} dict notation, except that the key values don't need quoting:
#{foo: "bar"}.

Sound functions

8.1.1502, 8.1.1565 (Jun 17)

Ability to play sound; see sound_playevent().

v:option_command, v:option_oldlocal, v:option_oldglobal

8.1.1542 (Jun 15)

Improvements for the OptionSet event.


8.1.1539 (Jun 15)

Constants; same as :let v = 1 | :lockvar v


8.1.1418 (May 29)

execute() in the context of a specific window.


8.1.1391 (May 25)

Highlight group to use instead of hl-Normal for this window.

g:actual_curwin, g:statusline_winid

8.1.1372 (May 23)

Temporarily set when running expressions inside the 'statusline' (%{expr}).


8.1.1354 (May 19)

Heredoc assignment:

let text =<< trim END

Text properties

8.1.0579, 8.1.1340, 8.1.1341 (May 17)

Assign metadata to text in a buffer, as an alternative to Vim's syntax highlighting. See textprop. This is still an experimental feature.


8.1.1320, 8.1.1321, 8.1.1332 (May 14)

Add a callback that will be invoked when changed have been made to a buffer.

Default values for function arguments

8.1.1310 (May 9)

e.g. function Fun(value=10). See optional-function-argument.


8.1.1307 (May 9)

Reconnect to X server after restart.

environ(), getenv(), and setenv()

8.1.1305 (May 9)

Deal with environment variables.


8.1.1291 (May 7)

Change directory with scope and ability to restore.

:cbefore, :cafter

8.1.1275 (May 5)

Navigate to errors before/after the cursor.

Show match position when searching

8.1.1270 (May 4)

Show "3/44" when using n and "S" is not in 'shortmess'.

:cabove, :cbelow, :labove, :lbelow

8.1.1256 (May 3)

Navigate through errors relative to the cursor.

Control font weight on Windows'

8.1.1224 (Apr 28)

Use "W" in 'guifont' to control font weight on Windows. See gui-font.

Tab-local directory

8.1.1218 (Apr 27)

See :tcd. Similar to the window-local directory with :lcd.

v: prefix is required

8.1.1188 (Apr 20)

Previously e.g. count would also work. The v: prefix is mandatory when :scriptversion is 3 or higher.

Add more arguments to winnr()

8.1.1140 (Apr 8)

To find out what neighbors a window has.

CompleteChanged event

8.1.1138 (Apr 8)

After each time the Insert mode completion menu changed.

str2list() and list2str()

8.1.1122 (Apr 6)

Convert a string to a list of byte, or the reverse.


8.1.1120 (Apr 5)

Get contents of a directory.


8.1.1116 (Apr 4)

Specify VimScript compatibility level.

.. operator

8.1.1114 (Apr 4)

String concatenation operator, as . is ambiguous. 'a' .. 'b' and 'a' . 'b' are identical. Also adds ..=.

++once argument for :autocmd

8.1.1113 (Apr 4)

Run an autocommand just once, e.g. au CursorMoved * ++once :echom 'ONCE'.

Add window ID argument to matchdelete(), clearmatches(), getmatches(), setmatches()

8.1.1084 (Mar 30)


8.1.1068 (Mar 29)

Get information about current completion.


8.1.1056 (Mar 26)

Evaluate a Ruby expression.


8.1.0972 (Feb 22)

Switch tabs, like gt and gT. Mainly useful to switch from terminal window.

*=, /=, %=

8.1.0902 (Feb 12)

e.g. let var *= 2

a: variables are immutable

8.1.0888, 8.1.0897 (Feb 11)

Previously it was possible to change a: variables in some cases.

[:ident:], [:keyword:], [:fname:]

8.1.0862 (Jan 31)

Allow for a third character for "tab:" in 'listchars'

8.1.0759 (Jan 16)

Third character is set as the last one for a tab, e.g. set listchars=tab:(_) shows a tab as (______).

Blob type

8.1.0735, 8.1.0756, 8.1.0757 (Jan 15)

A blob stores binary data. Blob literals start with 0z, e.g. 0zDEADBEEF. See blob.

"p" flag in 'formatoptions'

8.1.0728 (Jan 11)

Don't break lines at single spaces that follow periods.


8.1.0706 (Jan 8)

Redraw tabline after changing 'tabline' (mainly useful for plugins).


sign_place(), sign_unplace(), etc

8.1.0614, 8.1.0658 (Dec 29)

Functions for defining and placing signs.

Allow functions and commands to redefine themselves

8.1.0515, 8.1.0573 (Dec 8)

Previously a ! always had to be added to function to overwrite a function with the same name. Now Vim is smarter and allows a function to overwrite itself. This means that using function! in your vimrc or plugin's autoload is almost never required any more.

:filter support for more commands

8.0.1651, 8.1.0165, 8.1.0495 (Oct 25)


8.1.0487 (Oct 19)

Popup menu for terminal.

Include the xdiff library

8.1.0360, 8.1.0393 (Sep 15)

Include diff library instead of relying on external tools to improve diff quality. Many new 'diffopt' settings (e.g. set diffopt+=internal,algorithm:patience would be a good setting for many).


8.1.0369 (Sep 11)

Comments in line continuations; see line-continuation-comment:

au FileType git
            "\ Go to commit.
            \  nnoremap <Leader>g :exe printf(":!cd ~/src/vim && git diff %s^\!", split(getline('.'), ' ')[1])<CR>
            "\ Delete commit.
            \| nnoremap <Leader>d :call search('^commit ', 'bc') \| :exe 'd' . (search('^commit ', 'n') - line('.'))<CR>


8.1.0311 (Aug 21)

Filter quickfix/location list

'vartabstop', 'varsofttabstop'

8.1.0105 (Jun 23)

Variable tabstop widths, e.g. set vartabstop=4,8 makes the first tab 4 spaces, and the rest 8.

promp buffer

8.1.0027, 8.1.0035 (Jun 6)

Mainly useful to feed user input to a job.

Allow :unlet $ENV

8.0.1832 (May 13)

Previously there was no way to truly unset an environment variable (just set it to an empty string).


8.0.1787 (May 1)

Insert line from buffer in commandline

job_info() without argument lists all jobs

8.0.1742 (Apr 21)

mkdir('p') won't fail fail if the directory already exists

8.0.1708 (Apr 14)

Add the terminal API.

8.0.1641 (Mar 25)

See terminal-api.


8.0.1630 (Mar 22)

Clean whitespace; had to use substitute() before.

Add "!" to 'guioptions'

8.0.1609, 8.0.1616 (Mar 18)

Use a Vim terminal window for :! shell commands.

Menus in terminal

8.0.1558, 8.0.1570 (Mar 5)

Make :popup and right-click work in terminal.

24 bit colors in Windows console

8.0.1531 (Feb 22)

See 'termguicolors'.


8.0.1491 (Feb 10)

Minimum width of completion menu.

DirChanged event

8.0.1459 (Feb 3)

When directory changed (with :cd, :lcd, etc.)

CmdlineChanged event

8.0.1445 (Jan 31)

After a change was made to the text in the command line.


TextYankPost event

8.0.1394 (Dec 16)

After yanking or deleting text.


8.0.1364 (Dec 2)

Get winow position.

CmdlineEnter, CmdlineLeave

8.0.1206 (Oct 19)

When entering and leaving the commandline.


8.0.0693, 8.0.0730, 8.0.0744, 8.0.0804, 8.0.0929, 8.0.1108 (Sep 14)

Terminal buffer.

--clean, 'viminfofile'

8.0.0716 (Jul 15)

Start Vim with the default settings and without plugins.

E flag in 'cinoptions'

8.0.0431 (Mar 8)

Set indent for extern block.

'pyxversion', :pythonx

8.0.0251 (Jan 28)

Make it easier to run Python code in both Python 2 and 3, depending on what is available.