Jump to content

Neovim: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
reposition translate tag to reduce translation change
Tags: Mobile edit Mobile web edit Visual edit
DHCP (talk | contribs)
m Tips and Tricks: style: fix headings case
 
(15 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
{{low quality|reason=<translate>Most of the provided nix code snippets look out of context, lacking indication where the provided configuration belongs (e.g. home-manager, configuration.nix or elsewhere?). [[#Beginning]] is over too wordy.</translate>}}
{{infobox application
{{infobox application
   |name=Neovim
   |name=Neovim
Line 6: Line 7:
   |developer=Neovim Core Team & Community
   |developer=Neovim Core Team & Community
   |firstRelease=November 1, 2015
   |firstRelease=November 1, 2015
   |latestRelease=Nvim 0.11.2 (May 30, 2025)
   |latestRelease=Nvim 0.12.2 (April 22, 2026)
   |status=Active
   |status=Active
   |license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license)
   |license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license)
Line 19: Line 20:


<translate>
<translate>
<!--T:76-->
:''See also: <tvar name=vim>[[Special:MyLanguage/Vim|Vim]]</tvar>''
<!--T:1-->
<!--T:1-->
:''See also: [[Vim]]''
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/</ref> is a highly extensible and open source text editor that aims to improve upon and modernize the popular <tvar name=vim>[[Special:MyLanguage/Vim|Vim]]</tvar><ref>NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim</ref> editor. It's designed to be a drop-in replacement for Vim, maintaining compatibility with most Vim plugins and configurations while offering additional features and improvements. Neovim focuses on extensibility, usability, and performance.
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/</ref> is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]]<ref>NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim</ref> editor. It's designed to be a drop-in replacement for Vim, maintaining compatibility with most Vim plugins and configurations while offering additional features and improvements. Neovim focuses on extensibility, usability, and performance.


<!--T:2-->
<!--T:2-->
Line 30: Line 33:
==== Shell ==== <!--T:4-->
==== Shell ==== <!--T:4-->


<!--T:5-->
<!--T:60-->
To temporarily use Neovim in a shell environment without modifying your system configuration, you can run:
To temporarily use Neovim in a shell environment without modifying your system configuration, you can run:
</translate>
</translate>


{{code|lang=bash|line=no|1=$ nix-shell -p neovim}}
<syntaxhighlight lang="console">
$ nix-shell -p neovim
</syntaxhighlight>


<translate>
<translate>
This makes the Neovim editor available in your current shell. You can then launch Neovim by typing <code>neovim</code>.
<!--T:61-->
This makes the Neovim editor available in your current shell. You can then launch Neovim by typing <code>nvim</code>.


==== System setup ==== <!--T:6-->
==== System setup ==== <!--T:62-->


<!--T:63-->
To install Neovim system-wide, making it available to all users, add the following to your configuration:
To install Neovim system-wide, making it available to all users, add the following to your configuration:
</translate>
</translate>


{{code|lang=nix|line=no|1=<translate># Example for /etc/nixos/configuration.nix</translate>
{{code|lang=nix|line=no|1=<translate><!--T:64--> # Example for /etc/nixos/configuration.nix</translate>
environment.systemPackages = [
environment.systemPackages = [
   pkgs.neovim
   pkgs.neovim
];
];


<translate># User-specific installation (in ~/.config/nixpkgs/home.nix)</translate>
<translate><!--T:65--> # User-specific installation (in ~/.config/nixpkgs/home.nix)</translate>
home.packages = [
home.packages = [
   pkgs.neovim
   pkgs.neovim
Line 55: Line 62:


<translate>
<translate>
<!--T:66-->
After rebuilding your system with <code>nixos-rebuild switch</code> or <code>home-manager switch</code>, Neovim will be installed and accessible.
After rebuilding your system with <code>nixos-rebuild switch</code> or <code>home-manager switch</code>, Neovim will be installed and accessible.


Line 116: Line 124:
# You have to add the line below to set it as the default editor:
# You have to add the line below to set it as the default editor:
</translate>
</translate>
environment.variables.EDITOR = "nvim";}}
programs.neovim.defaultEditor = true;}}


<translate>
<translate>
== Tips and Tricks == <!--T:12-->
<!--T:12-->
== Tips and tricks ==
{{expand}}
{{expand}}


==== Package Variations ==== <!--T:15-->
==== Nix configuration frameworks ====


[https://github.com/nix-community/nixvim Nixvim] and [https://github.com/NotAShelf/nvf nvf] provide a framework for declaratively configuring neovim with [[Nix (language)|Nix]]. They support, among the other things, plugin configuration, as well as mixing in plain Lua config snippets.
Linux and Darwin platforms are supported using standalone Nix, [[NixOS]] or [[Home Manager]] modules.
==== Package variations ==== <!--T:15-->
<!--T:44-->
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay</ref> to install the most recent current nightly version of Neovim.
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay</ref> to install the most recent current nightly version of Neovim.
<!--T:16-->
You can run the master version via the following command:
You can run the master version via the following command:
</translate>
</translate>


{{code|lang=bash|line=no|1=$ nix run "github:nix-community/neovim-nightly-overlay"}}
 
<syntaxhighlight lang="console">
$ nix run "github:nix-community/neovim-nightly-overlay"
</syntaxhighlight>


<translate>
<translate>
==== Plugin Management ==== <!--T:21-->
==== Plugin management ==== <!--T:21-->
</translate>
</translate>


Line 226: Line 246:


<translate>
<translate>
==== Frameworks ==== <!--T:18-->
==== Pre-made distributions ==== <!--T:18-->


<!--T:45-->
<!--T:45-->
Line 233: Line 253:
<!--T:19-->
<!--T:19-->
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/</ref>
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/</ref>
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/</ref>
* [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/</ref>


<!--T:46-->
<!--T:77-->
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/</ref>
LazyVim, by default, will prevent loading plugins that are not managed by LazyVim. This includes all plugins installed via Nix. If you want to install plugins with both Nix and LazyVim, add the following to your LazyVim setup:
</translate>
 
{{code|lang=lua|line=no|1=
require("lazy").setup(lazyPackages, {
  performance = {
    reset_packpath = false, -- so that plugins outside of lazy can be loaded
  },
})
vim.cmd("packloadall") -- load plugins outside of lazy
}}


<!--T:47-->
<translate>
* [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/</ref>
<!--T:78-->
[https://github.com/folke/lazy.nvim/issues/402#issuecomment-2084997594 Source]


==== FHS wrapper ==== <!--T:48-->
==== FHS wrapper ==== <!--T:67-->


<!--T:68-->
You can create a custom neovim FHS wrapper
You can create a custom neovim FHS wrapper
</translate>
</translate>
Line 261: Line 295:
}}
}}


<!--T:FHS_WRAPPER_SOURCE-->
<translate>
<translate>
<!--T:FHS_WRAPPER_SOURCE-->
<!--T:69-->
This FHS wrapper example is based on a contribution to nixpkgs<ref name="nixpkgs-pr-334032">NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032</ref>.
This FHS wrapper example is based on a contribution to nixpkgs<ref name="nixpkgs-pr-334032">NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032</ref>.
For an extended configuration that includes setting up `mason.nvim` with a similar FHS environment, see this [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs issue comment].
For an extended configuration that includes setting up <code>mason.nvim</code> with a similar FHS environment, see this [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs issue comment].


== Troubleshooting == <!--T:59-->
<!--T:59-->
== Troubleshooting ==
{{expand}}
{{expand}}


==== lua-language-server: Dynamically linked executable error ====
==== lua-language-server: Dynamically linked executable error ==== <!--T:70-->


<!--T:71-->
In your <code>~/.local/state/nvim/lsp.log</code>, you have the following error:
In your <code>~/.local/state/nvim/lsp.log</code>, you have the following error:
</translate>
</translate>
Line 276: Line 313:
{{code|lang=text|line=no|1=[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36 "rpc" "lua-language-server" "stderr" "Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"}}
{{code|lang=text|line=no|1=[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36 "rpc" "lua-language-server" "stderr" "Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"}}


<!--T:LUA_LS_SO_REF-->
<translate>
<translate>
<!--T:LUA_LS_SO_REF-->
<!--T:72-->
A solution for this issue can be found on Stack Overflow<ref name="so-lua-ls-dynlink">Stack Overflow Contributor, "Answer to 'Could not start dynamically linked executable... on NixOS'", Stack Overflow, 2025, Accessed June 2025. https://stackoverflow.com/a/78215911/27134695</ref>.
A solution for this issue can be found on Stack Overflow<ref name="so-lua-ls-dynlink">Stack Overflow Contributor, "Answer to 'Could not start dynamically linked executable... on NixOS'", Stack Overflow, 2025, Accessed June 2025. https://stackoverflow.com/a/78215911/27134695</ref>.


== See also ==
== See also == <!--T:73-->


<!--T:74-->
* [[Home Manager]] – For declarative Neovim configuration at the user level: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Neovim module in Home Manager]
* [[Home Manager]] – For declarative Neovim configuration at the user level: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Neovim module in Home Manager]
* [https://neovim.io/doc/ Official Documentation] – Official Neovim documentation.
* [https://neovim.io/doc/ Official Documentation] – Official Neovim documentation.
* [https://search.nixos.org/options?channel=unstable&query=programs.neovim NixOS options for Neovim] – System-level Neovim configuration.
* [https://search.nixos.org/options?channel=unstable&query=programs.neovim NixOS options for Neovim] – System-level Neovim configuration.
* [https://discourse.nixos.org/search?q=neovim Neovim discussions on NixOS Discourse] – Community tips, troubleshooting, and use cases.
* [https://discourse.nixos.org/search?q=neovim Neovim discussions on NixOS Discourse] – Community tips, troubleshooting, and use cases.
* [https://github.com/nix-community/neovim-overlay Neovim Overlay on Nixpkgs] – For nightly builds and additional Neovim packages.


== References == <!--T:27-->
== References == <!--T:27-->
</translate>


[[Category:Applications]]
[[Category:Applications]]
[[Category:CLI Applications]]
[[Category:CLI Applications]]
[[Category:Text Editor]]
[[Category:Text Editor]]
</translate>

Latest revision as of 16:00, 19 May 2026

⍼︎
This article or section is of low quality. Most of the provided nix code snippets look out of context, lacking indication where the provided configuration belongs (e.g. home-manager, configuration.nix or elsewhere?). #Beginning is over too wordy. Further information may be found in the related discussion page. Editors that are knowledgeable in this area are encouraged to expand it, otherwise this page could become a candidate for deletion.

Neovim

Text Editor Application

100%
Developer(s)Neovim Core Team & Community
Latest releaseNvim 0.12.2 (April 22, 2026)
StatusActive
Operating SystemCross-platform (Linux, macOS, Windows)
Platform(s)Desktop
Language(s)C, Lua, Vim Script
LicenseApache 2.0 (with parts under Vim license)
External links
Websiteneovim.io
GitHubneovim/neovim
Bug trackerGitHub Issues
DocumentationOfficial Documentation
See also: Vim

Neovim[1] is a highly extensible and open source text editor that aims to improve upon and modernize the popular Vim[2] editor. It's designed to be a drop-in replacement for Vim, maintaining compatibility with most Vim plugins and configurations while offering additional features and improvements. Neovim focuses on extensibility, usability, and performance.

It introduces a powerful plugin architecture that allows for asynchronous plugin execution, which can significantly improve performance for certain operations. It also includes a built-in terminal emulator, allowing users to run shell commands directly within the editor. The project emphasizes code quality and maintainability, with a clean, well-documented codebase that makes it easier for developers to contribute.

Installation

Shell

To temporarily use Neovim in a shell environment without modifying your system configuration, you can run:

$ nix-shell -p neovim

This makes the Neovim editor available in your current shell. You can then launch Neovim by typing nvim.

System setup

To install Neovim system-wide, making it available to all users, add the following to your configuration:

# Example for /etc/nixos/configuration.nix
environment.systemPackages = [
  pkgs.neovim
];

# User-specific installation (in ~/.config/nixpkgs/home.nix)
home.packages = [
  pkgs.neovim
];

After rebuilding your system with nixos-rebuild switch or home-manager switch, Neovim will be installed and accessible.

Configuration

Basic

# Global Configuration
programs.neovim = {
   enable = true;
   defaultEditor = true;
};

# Home Configuration
programs.neovim = {
  enable = true;
  extraConfig = ''
    set number relativenumber
  '';
};

Advanced

# Global Configuration
programs.neovim = {
  enable = true;
  defaultEditor = true;
  viAlias = true;
  vimAlias = true;
  configure = {
    customRC = ''
      set number
      set cc=80
      set list
      set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:»
      if &diff
        colorscheme blue
      endif
    '';
    packages.myVimPackage = with pkgs.vimPlugins; {
      start = [ ctrlp ];
    };
  };
};

# Home Configuration
# You have to add the line below to set it as the default editor:
programs.neovim.defaultEditor = true;

Tips and tricks

☶︎
This article or section needs to be expanded. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.

Nix configuration frameworks

Nixvim and nvf provide a framework for declaratively configuring neovim with Nix. They support, among the other things, plugin configuration, as well as mixing in plain Lua config snippets. Linux and Darwin platforms are supported using standalone Nix, NixOS or Home Manager modules.

Package variations

Have a look at the Neovim Nightly Overlay[3] to install the most recent current nightly version of Neovim.

You can run the master version via the following command:


$ nix run "github:nix-community/neovim-nightly-overlay"

Plugin management

plugins = [
  # Example Plugin: nvim-tree-lua
  pkgs.vimPlugins.nvim-tree-lua

  # Example Plugin: vim-startify with configuration
  {
    plugin = pkgs.vimPlugins.vim-startify;
    config = "let g:startify_change_to_vcs_root = 0";
  }

  # Example Plugin: nvim-colorizer-lua with Lua config
  # Due to how the runtimepath for Lua modules is processed, your configuration may require
  # packadd! plugin-name to require a module. A home-manager example:
  {
    plugin = pkgs.vimPlugins.nvim-colorizer-lua;
    config = ''
      packadd! nvim-colorizer.lua
      lua << END
        require 'colorizer'.setup {
          '*'; -- Highlight all files, but customize some others.
          '!vim'; -- Exclude vim from highlighting.
        }
      END
    '';
  }

  # Example Plugin: nvim-treesitter with Lua config
  {
    plugin = pkgs.vimPlugins.nvim-treesitter;
    config = ''
      packadd! nvim-treesitter
      lua <<EOF
        require'nvim-treesitter.configs'.setup {
          highlight = {
            enable = true,              -- false will disable the whole extension
            disable = {},               -- list of languages that will be disabled
          },
          incremental_selection = {
            enable = true,
            keymaps = {
              init_selection = "gnn",
              node_incremental = "grn",
              scope_incremental = "grc",
              node_decremental = "grm",
            },
          },
          textobjects = {
            select = {
              enable = true,
              lookahead = true,
              keymaps = {
                ["af"] = "@function.outer",
                ["if"] = "@function.inner",
                ["ac"] = "@class.outer",
                ["ic"] = "@class.inner",
              },
            },
          },
        }
      EOF
    '';
  }

  # Installing grammars for tree-sitter
  # Option 1: Install all grammar packages
  pkgs.vimPlugins.nvim-treesitter.withAllGrammars
  
  # Option 2: Install specific grammar packages
  # (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ]))

  # Option 3: Installing grammars without Nix
  # Installing grammar packages through the built-in command can lead to errors.
  # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
];

Pre-made distributions

If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:

LazyVim, by default, will prevent loading plugins that are not managed by LazyVim. This includes all plugins installed via Nix. If you want to install plugins with both Nix and LazyVim, add the following to your LazyVim setup:

require("lazy").setup(lazyPackages, {
   performance = {
     reset_packpath = false, -- so that plugins outside of lazy can be loaded
   },
 })
 vim.cmd("packloadall") -- load plugins outside of lazy

Source

FHS wrapper

You can create a custom neovim FHS wrapper

{
  buildFHSEnv,
  writeShellScript,
  neovim,
}:
buildFHSEnv {
  name = "nvim-fhs";
  targetPkgs = pkgs: [ neovim ];

  runScript = writeShellScript "nvim-fhs.sh" ''
    exec ${neovim}/bin/nvim "$@"
  '';
}

This FHS wrapper example is based on a contribution to nixpkgs[7]. For an extended configuration that includes setting up mason.nvim with a similar FHS environment, see this NixOS/nixpkgs issue comment.

Troubleshooting

☶︎
This article or section needs to be expanded. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.

lua-language-server: Dynamically linked executable error

In your ~/.local/state/nvim/lsp.log, you have the following error:

[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36	"rpc"	"lua-language-server"	"stderr"	"Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"

A solution for this issue can be found on Stack Overflow[8].

See also

References

  1. Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/
  2. NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim
  3. Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay
  4. LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/
  5. AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/
  6. Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/
  7. NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032