Following-HEAD
The following changes 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.
- Use
:checkhealthto detect and fix common problems.
2019/07/07
Floating windows no longer implicitly disables the number column. Instead use style='minimal' argument to nvim_open_win() to disable UI features like number column, End-of-buffer lines etc.
2019/06/10
#10123 Nvim core requires libluv. This may require building with -DUSE_BUNDLED_LUV=ON if you were previously using -DUSE_BUNDLED_LUV=OFF. Previously luv was only needed for running tests; now nvim statically links libluv in order to provide the vim.loop Lua interface.
2019/03/31
#9819 MenuPopupChanged renamed to CompleteChanged.
2019/01/20
#9526: Neovim always uses the system allocator, instead of jemalloc.
2018/11/18
The Python package neovim was renamed to pynvim.
"Neovim" can mean a lot of things. It can relate to the editor, or the project, or (prior to this change) the Python module, or the Ruby gem, etc. Especially confusing was the fact that the Python side would refer to it as neovim whereas the Neovim side referred to it as python-client. Now, both sides call it pynvim for the greater good.
For the time being, neovim acts as a transitional package for the new pynvim. Unfortunately, due to limitations in pip, the neovim package cannot be safely upgraded with pip install --upgrade neovim on all systems.
Steps to update "pynvim" (formerly "neovim") Python package:
pip uninstall neovim pynvim
pip install pynvim
- After those steps, it is safe to
pip install neovimagain, if any third-party package has it as a formal dependency. Otherwise it shouldn't be necessary. import neovimis still supported, both in plugins and third-party software using it as a library. Ifimport neovimfails, then the upgrade wasn't successful. Follow the instructions above.
2018/09/22
#9024: The meaning of the --embed and --headless flags changed to facilitate better startup behaviour with external UIs. UI embedders (any user of nvim_ui_attach) must start Nvim without --headless:
nvim --embed
Embedders not using the UI protocol must use:
nvim --embed --headless
In the "--embed only" case Nvim waits for nvim_ui_attach before continuing startup (user config, reading buffers) so that UIs can deterministically handle (display) early messages, dialogs, etc. The client can do other requests before nvim_ui_attach (e.g. nvim_get_api_info for feature-detection). During this pre-startup phase the user config is of course not available (similar to --cmd).
For most UI embedders this improves startup behavior automatically, by supporting startup messages
and swapfile dialogs. For others it is potentially a breaking change, which can be easily avoided by specifying --headless (which is backwards-compatible for that use-case).
UIs that need additional initialization after init.vim can use this pattern:
- Before
nvim_ui_attachsend a singlenvim_commandrequest with the command"autocmd VimEnter * call rpcrequest(1, 'vimenter')". - In the
vimentermethod handler the UI can then safely execute any requests. - Nvim will only enter normal mode when the handler returns (because
rpcrequest()is a blocking call).
2018/06/10
Changes from #7679:
- Nvim treats a stdin stream as text by default:
echo foo | nvim
- To get the old behavior, pass stdin to
-s:echo foo | nvim -s -
- Windows only:
nvim *.txt(glob/wildcard expression) is treated literally. Use the:next(:n) command instead:nvim +"n *.txt"
2018/02/23
Default fillchars for 'vert' and 'sep' changed from respectively | and - to โ and ยท when the ambiwidth setting is different from double, else old defaults apply. #8035
2017/11/18
VimL (Vimscript) compatibility: count is no longer an alias to v:count.
This helps avoid mistakes in scripts. #7407
2017/08/21
:terminal now starts in normal mode (#6808), like any other buffer, instead of terminal mode. This avoids the cursor getting "trapped" when a terminal is started.
2017/05/15
The highlight option is now read-only (#6737), so that the built-in highlight groups (and their behaviors) are predictable and can be used as keys for features like winhighlight.
2017/04/03
Default 'mouse' setting changed from mouse=a to mouse= (empty). This will change again in the future after mouse=a is improved. To continue using mouse, add this to your init.vim:
set mouse=a
2017/04/02
Support for $NVIM_TUI_ENABLE_CURSOR_SHAPE was removed. Use the guicursor option to control cursor styling. See FAQ.
- To disable cursor style changes, set
guicursorto empty::set guicursor=
- Note:
guicursoris enabled by default only if Nvim is certain it won't cause problems on your terminal. If you know that cursor shaping works on your terminal, setguicursorin your init.vim::set guicursor=n-v-c:block-Cursor/lCursor-blinkon0,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor
2016/12/12
#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 https://github.com/neovim/neovim/issues/5763#issuecomment-266722407
2016/11/05
['encoding'][encoding] cannot be changed to a value other than "utf-8", even during initialization. #2905
(Background: [#2929][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.)
2016/02/14
: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 offor:syntax off, that will be respected. - If
filetype plugin indent onand/orsyntax onis in your vimrc, you can delete those lines.
See :help startup for complete details.
2015/10/17
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.
2015/07/26
The behavior of the mkdir() function has changed:
- 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. - If you try to create an existing directory with
'p', such as withmkdir('/', 'p')), mkdir() will silently fail. In Vim this was an error. - Upon failure, mkdir() related error messages now include strerror() text.
See #3041 for more information.