Justin M. Keyes edited this page Aug 5, 2018 · 137 revisions

Note: :CheckHealth (or :checkhealth for nvim >= 0.3) detects and resolves many of the problems in this FAQ. Try it!


Something broke after upgrading Neovim?

Check Following-HEAD for a list of breaking changes.

How stable is the development (pre-release) version?

The unstable (pre-release) version of Neovim ("HEAD", i.e. the master branch) is used to aggressively stage new features and changes. It's usually stable, but will occasionally break your workflow. We depend on HEAD users to report "blind spots" that were not caught by automated tests.

Use the stable (release) version for a more predictable experience.

Where should I put my config (vimrc)?

See :help vimrc.

You can copy your existing vimrc, or symlink to it. :help nvim-from-vim

Can I use Ruby-based Vim plugins (e.g. LustyExplorer)?

Yes, starting with Neovim 0.1.5 PR #4980 the legacy Vim if_ruby interface is supported.

Can I use Lua-based Vim plugins (e.g. neocomplete)?

No. Starting with Neovim 0.2 PR #4411 Lua is built-in, but the legacy Vim if_lua interface is not supported.

How can I use "true color" in the terminal?

Add this to your init.vim:

set termguicolors
  • See this gist for more information.
  • See this thread for guidance on how to check your system capabilities.

Nvim shows weird symbols (�[2 q) when changing modes

This is a bug in your terminal emulator. It happens because Nvim sends cursor-shape termcodes by default, if the terminal appears to be xterm-compatible (TERM=xterm-256color).

To workaround the issue, you can:

  • Use a different terminal emulator
  • Disable guicursor in your Nvim config:
    :set guicursor=
    " Workaround some broken plugins which set guicursor indiscriminately.
    :autocmd OptionSet guicursor noautocmd set guicursor=
    

See also :help $TERM for recommended values of $TERM.

How to change cursor shape in the terminal?

  • For Nvim 0.1.7 or older: see the note about NVIM_TUI_ENABLE_CURSOR_SHAPE in man nvim.
  • For Nvim 0.2 or newer: cursor styling is controlled by the guicursor option.
    • To disable cursor-styling, set guicursor to empty:
      :set guicursor=
      " Workaround some broken plugins which set guicursor indiscriminately.
      :autocmd OptionSet guicursor noautocmd set guicursor=
      
    • If you want a non-blinking cursor, use blinkon0. See :help 'guicursor'.
    • guicursor is enabled by default, unless Nvim thinks your terminal doesn't support it. If you're sure that your terminal supports cursor-shaping, set guicursor in your init.vim, as described in :help 'guicursor'.
  • The Vim terminal options t_SI and t_EI are ignored, like all other t_XX options.
  • Old versions of libvte (gnome-terminal, roxterm, terminator, ...) do not support cursor style control codes. #2537

How to change cursor color in the terminal?

Cursor styling (shape, color, behavior) is controlled by guicursor, even in the terminal. Cursor color (as opposed to shape) only works if termguicolors is set.

:help 'guicursor' gives an example, but here's a more complicated example which sets different colors in insert-mode and normal-mode:

:set termguicolors 
:hi Cursor guifg=green guibg=green
:hi Cursor2 guifg=red guibg=red
:set guicursor=n-v-c:block-Cursor/lCursor,i-ci-ve:ver25-Cursor2/lCursor2,r-cr:hor20,o:hor50

Cursor style isn't restored after exiting Nvim

Terminals do not provide a way to query the cursor style. Use a VimLeave autocommand to set the cursor style when Nvim exits:

au VimLeave * set guicursor=a:block-blinkon0

Cursor shape doesn't change in tmux

Add this to your .tmux.config:

set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'

See #3165 for discussion.

Is Windows supported?

Yes, starting with the 0.2 release. See the Install page.

How to use the Windows clipboard from WSL?

sudo ln -s /mnt/d/Neovim/bin/win32yank.exe /usr/bin/win32yank

See #6227.

What happened to --remote and friends?

The code for that family of command-line arguments was removed. It may eventually be reimplemented using the Neovim API, but until then neovim-remote can be used instead.

See #1750 for more information.

Runtime issues

Copying to X11 primary selection with the mouse doesn't work

clipboard=autoselect is not implemented yet. You may find this partial workaround to be useful:

vnoremap <LeftRelease> "*ygv

Note that this is only a partial workaround. It doesn't work for double-click (word selection) nor triple-click (line selection). But it's better than nothing.

My CTRL-H mapping doesn't work

This was fixed in Neovim 0.2. If you are running Neovim 0.1.7 or older, adjust your terminal's "kbs" (key_backspace) terminfo entry:

infocmp $TERM | sed 's/kbs=^[hH]/kbs=\\177/' > $TERM.ti
tic $TERM.ti

(Feel free to delete the temporary *.ti file created after running the above commands).

<Home> or some other "special" key doesn't work

Make sure $TERM is set correctly.

  • For screen or tmux, TERM should be screen-256color (Not xterm-256color)
  • In other cases if "256" does not appear in the string it's probably wrong. Try TERM=xterm-256color.

:! and system() do weird things with interactive processes

Interactive commands are supported by :terminal in Neovim. But :! and system() do not support interactive commands, primarily because Neovim UIs use stdio for msgpack communication, but also for performance, reliability, and consistency across platforms (see :help gui-pty).

See also #1496 and #8217.

Python support isn't working

Run :CheckHealth (available in 0.1.5) inside Neovim for automatic diagnosis.

Additional hints:

  • If you are using pyenv or virtualenv for the neovim python module, you must set g:python_host_prog and/or g:python3_host_prog to the virtualenv's interpreter path.
  • Read :help provider-python.
  • Be sure you have the latest version of the neovim Python module.
pip install setuptools
pip  install --upgrade neovim
pip2 install --upgrade neovim
pip3 install --upgrade neovim
  • Try with nvim -u NORC to make sure your init.vim isn't causing a problem. If you get E117: Unknown function, that means Neovim can't find its runtime.

:checkhealth reports E5009: Invalid $VIMRUNTIME

This means health#check() couldn't load, which suggests that $VIMRUNTIME or &runtimepath is broken.

  • $VIMRUNTIME must point to Neovim's runtime files, not Vim's.
  • The $VIMRUNTIME directory contents should be readable by the current user.
  • Verify that :echo &runtimepath contains the $VIMRUNTIME path.
  • Check the output of:
    :call health#check()
    :verbose func health#check
    

Neovim can't find its runtime

This is the case if :help nvim shows E149: Sorry, no help for nvim.

Make sure that $VIM and $VIMRUNTIME point to Neovim's (as opposed to Vim's) runtime by checking :echo $VIM and :echo $VIMRUNTIME. This should give something like /usr/share/nvim resp. /usr/share/nvim/runtime.

Also make sure that you don't accidentally overwrite your runtimepath (:set runtimepath?), which includes the above $VIMRUNTIME by default (see :help 'runtimepath').

E518: Unknown option: [option]

Some very old/unnecessary options have been removed from Neovim. See :help nvim-features-removed for the complete list.

Neovim is slow

Use a fast terminal emulator

Use an optimized build

:CheckHealth nvim should report one of these "build types":

Build type: RelWithDebInfo
Build type: MinSizeRel
Build type: Release

If it reports Build type: Debug and you're building Neovim from source, see Building Neovim#optimized-builds.

Colors aren't displayed correctly

From a shell, run TERM=xterm-256color nvim. If colors are displayed correctly, then export that value of TERM in your user profile (usually ~/.profile):

export TERM=xterm-256color

If you're using tmux, instead add this to your tmux.conf:

set -g default-terminal "screen-256color"

Some tmux users may need to instead use:

set -g default-terminal "screen-256color-bce"

For GNU screen, configure your .screenrc:

term screen-256color

Note: Neovim ignores t_Co and other terminal codes.

Neovim can't read UTF-8 characters

Run the following from the command line:

locale | grep -E '(LANG|LC_CTYPE|LC_ALL)=(.*\.)?(UTF|utf)-?8'

If there's no results, then you might not be using a UTF-8 locale. See the following issues: #1601 #1858 #2386

ESC in tmux or GNU Screen is delayed

This is a common problem in tmux / screen (see also tmux/#131). The corresponding timeout needs to be tweaked to a low value (10-20ms).

.tmux.conf:

set -g escape-time 10
# Or for tmux >= 2.6
set -sg escape-time 10

.screenrc:

maptimeout 10

"Why doesn't this happen in Vim?"

It does happen (try vim -N -u NONE), but if you hit a key quickly after ESC then Vim interprets the ESC as ESC instead of ALT (META). You won't notice the delay unless you closely observe the cursor. The tradeoff is that Vim won't understand ALT (META) key-chords, so for example nnoremap <M-a> won't work. ALT (META) key-chords always work in Nvim. See also :help xterm-cursor-keys in Vim.

Nvim 0.3 mimics the Vim behavior while still fully supporting ALT mappings. See :help i_ALT.

Installation issues

Generating helptags failed

If re-installation fails with Generating helptags failed, try removing the previously installed runtime directory (if CMAKE_INSTALL_PREFIX is not set during building, the default is /usr/local/share/nvim):

# rm -r /usr/local/share/nvim

Build issues

General build issues

Run make distclean && make to rule out a stale build environment causing the failure.

Proxy issues #2482

If your machine is behind a network proxy and you see this error:

Error: Failed installing dependency: https://rocks.moonscript.org/penlight-1.3.2-2.rockspec 
Error fetching file: Failed downloading http://stevedonovan.github.io/files/penlight-1.3.2-core.zip 

this can be fixed by setting the https_proxy environment variable (for cURL).

Settings in local.mk don't take effect

CMake caches build settings, so you might need to run rm -r build && make after modifying local.mk.

CMake errors

configure_file Problem configuring file

This is probably a permissions issue, which can happen if you run make as the root user, then later run an unprivileged make. To fix this, run rm -rf build and try again.

A suitable Lua interpreter was not found.

This can be caused by a local LuaRocks installation. Try unsetting the LUA_PATH and LUA_CPATH environment variables (via unset) before building.

Lua packages

The Lua packages required by the build process should be automatically installed by LuaRocks (invoked by CMake automatically). If that fails, it could mean:

  • The LuaRocks servers are down.
  • Your network is down.
  • unzip isn't found. In that case LuaRocks will report something like this: Warning: Failed searching manifest: Failed loading manifest: Failed extracting manifest file.
  • The $CDPATH environment variable is interfering with the build, so it should be unset prior to running make.

To try a different LuaRocks mirror, create the file .deps/usr/etc/luarocks/config-5.1.lua with these contents:

rocks_servers={ 
 "http://luarocks.giga.puc-rio.br/" 
}

Then run make cmake.

Design

Why not use JSON for RPC?

Why embed Lua instead of X?

  • Lua is a very small language, ideal for embedding. The biggest advantage of Python/Ruby/etc is their huge collection of libraries, but that isn't relevant for Nvim, where Nvim is the "batteries included" library: introducing another stdlib would be redundant.
  • Lua 5.1 is a complete language: the syntax is frozen. This is great for backwards compatibility.
  • Nvim also uses Lua internally as an alternative to C. Extra performance is useful there, as opposed to a slow language like Python.
  • LuaJIT is one of the fastest runtimes on the planet. It is at least 10x faster than Python.
  • Python/JS cost more than Lua in terms of size and portability, and there are already numerous Python/JS-based editors. So Python/JS would make Nvim bigger and less portable, in exchange for a non-differentiating feature.

See also:

Won't it be slower to translate VimL to Lua, instead of executing VimL directly?

We'll use LuaJIT, the fastest scripting runtime out there. Parsing an additional language will create some overhead, but that will be insignificant compared to the runtime performance improvements, because Vimscript is so slow. Plugins may even run faster.

Update (2016): PR #243 implements the VimL-to-Lua translator. But it is blocked indefinitely by technical concerns. Much of the work in that PR will be re-used/re-purposed (viz. typval_T/vim_to_object refactor and eval.c refactor).

Are plugin authors encouraged to port their plugins from Vimscript to Lua? Do you plan on supporting Vimscript indefinitely? (#1152)

We don't anticipate any reason to deprecate Vimscript, which is a valuable DSL for text-editing tasks. Maintaining Vimscript compatibility is less costly than a mass migration of existing Vim plugins.

Porting from Vimscript to Lua just for the heck of it gains nothing. Neovim is emphatically a fork of Vim in order to leverage the work already spent on thousands of Vim plugins, while enabling new types of plugins and integrations.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.