Following HEAD

Justin M. Keyes edited this page Jan 17, 2017 · 52 revisions

This page documents changes which may require users to update configuration, plugins, or expectations. Only breaking changes are mentioned here, this is not a reference for new features (see :help nvim instead).

If you don't have Neovim, see Building Neovim or Installing Neovim.

Note: Use :CheckHealth to detect and fix common problems.


#5529 merged Vim's support for "partial functions" which made Nvim more strict about when the implicit self variable is available. Functions that reference self (which is common with job callbacks) must either be declared as dict functions:

function! s:on_stdout(id, data, event) dict abort

or as part of the job options dictionary:

let s:opts = { ... }
function! s:opts.on_stdout(id, data, event) abort

Job callbacks also must have at least 3 parameters now. See


'encoding' cannot be changed to a value other than "utf-8", even during initialization. #2905

(Background: #2929 restricted 'encoding' to be modifiable only during initialization. One year later, we've found no problems with UTF-8 as the internal encoding, and are now making this mandatory. This only affects the internals of Nvim, it doesn't affect file encodings or plugins.)


:oldfiles! was removed in favor of restoring Vim's :browse oldfiles behavior. #5214


The :Man command is enabled by default (PR #4449), you no longer need

runtime! ftplugin/man.vim

in your vimrc.


"True color" support now requires set termguicolors in your init.vim. NVIM_TUI_ENABLE_TRUE_COLOR is ignored. #4690


:filetype plugin indent on and :syntax on are now executed by default after your vimrc.

  • If your vimrc calls :filetype, Neovim will not change your preference.
  • If your vimrc calls :filetype off or :syntax off, that will be respected.
  • If filetype plugin indent on and/or syntax on is in your vimrc, you can delete those lines.

See :help startup for complete details.


The DECSCUSR sequence is now sent "unwrapped" to the terminal; this affects tmux users in that cursor style changes are now localized to a tmux pane instead of being global to the parent terminal.

Depending on your terminal this may make break cursor style changes; if that happens then see NVIM_TUI_ENABLE_CURSOR_SHAPE in the nvim manual (man 1 nvim).

See #3165 for more information.


The NVIM_TUI_ENABLE_TRUE_COLOR environment variable no longer sets has('gui_running'). This means some (broken) colorschemes might look weird until they're fixed, but more importantly it also means that various plugins that make decisions based on the result of has('gui_running') will not be misled into thinking the user is running outside of a terminal.

Note: jellybeans and this molokai fork are known to work with true color even after the change . Colorschemes that don't work after this change should be fixed (they should set ctermfg/ctermbg and guifg/guibg, without checking has('gui_running'))

See #4155 for more information.


The 'swapsync' option has been removed. Swap files are now always fsync(2)'d after writing them.

See #4009 for more information.


You might notice that :version reports v0.1.2-... instead of v0.1.1-.... This does not mean v0.1.2 was released, but that the version now better conforms to

See #3839 for more information.


The Getscript plugin has been removed, so the commands GLVS, GetLatestVimScripts, and GetScripts are no longer supported. Getscript users should consider migrating to a 3rd party plugin manager, such as vim-plug.

See #2231 and #3826 for more information.


The -X command-line flag, which was a no-op, has been removed.

See #3641 for more information.


The open command has been removed. It works the same as visual, so use that instead.

See #3569 for more information.


Neovim now supports XDG configuration. The default config paths changed, so ~/.nvimrc and ~/.nvim/ will not be found by default. See :help nvim-from-vim for quick migration steps.


  • Default user config directory is now ~/.config/nvim/
  • Default "vimrc" location is now ~/.config/nvim/init.vim


The 'viminfo' option is now an alias for 'shada'. 'viminfo' can no longer include n and it can no longer be shared with Vim.

See #3469 for more information.


The 'encoding' option can no longer be changed after initialization.

See #2929 for more information.


The behavior of the mkdir() function has changed:

  1. Assuming /tmp/foo does not exist and /tmp can be written to, mkdir('/tmp/foo/bar', 'p', 0700) will create both /tmp/foo and /tmp/foo/bar with the octal permissions 0700. Vim's mkdir() will create /tmp/foo with 0755.
  2. If you try to create an existing directory with 'p', such as with mkdir('/', 'p')), mkdir() will silently fail. In Vim this was an error.
  3. Upon failure, mkdir() related error messages now include strerror() text.

See #3041 for more information.


The Print command has been removed. It works the same as print, so use that instead.

See #3049 for more information.


The default value for the 'history' option has changed from 50 to 10000. To emulate the old behavior, add the following to your nvimrc:

set history=50

See #2868 and #2676 for more information.


The POSIX 'cpoptions' flags have been removed. The VIM_POSIX environment variable now has no effect.

Attempting to add any of the following flags to 'cpoptions' will trigger an error: \ . / & | { #

See #2943 for more information.


The tearoff command has been removed. It was never actually implemented, so the only functional difference should be that


now returns 0 instead of 2.

See #3003 and #3007 for more information.