Neovim: Difference between revisions
Following the MoS guidelines |
Remove LunarVim (unmaintained) |
||
(11 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> | <languages/> | ||
{{infobox application | |||
|name=Neovim | |||
|image=Neovim-mark.svg | |||
|type=Text Editor | |||
|developer=Neovim Core Team & Community | |||
|firstRelease=November 1, 2015 | |||
|latestRelease=Nvim 0.11.2 (May 30, 2025) | |||
|status=Active | |||
|license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license) | |||
|os=Cross-platform (Linux, macOS, Windows) | |||
|platform=Desktop | |||
|programmingLanguage=C, Lua, Vim Script | |||
|website=[https://neovim.io/ neovim.io] | |||
|github=neovim/neovim | |||
|bugTracker=[https://github.com/neovim/neovim/issues GitHub Issues] | |||
|documentation=[https://neovim.io/doc/ Official Documentation] | |||
}} | |||
<translate> | <translate> | ||
<!--T:1--> | <!--T:1--> | ||
[https://neovim.io/ Neovim]<ref>Neovim Team, "Home - Neovim", Neovim Official Website, | :''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 [[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 9: | Line 27: | ||
== Installation == <!--T:3--> | == Installation == <!--T:3--> | ||
==== | ==== Shell ==== | ||
To temporarily use Neovim in a shell environment without modifying your system configuration, you can run: | |||
{{code|lang=bash|line=no|1=$ nix-shell -p neovim}} | |||
nix-shell -p neovim | This makes the Neovim editor available in your current shell. You can then launch Neovim by typing <code>neovim</code>. | ||
< | |||
< | |||
==== | ==== System setup ==== | ||
To install Neovim system-wide, making it available to all users, add the following to your configuration: | |||
{{code|lang=nix|line=no|1=# Example for /etc/nixos/configuration.nix | |||
environment.systemPackages = [ | environment.systemPackages = [ | ||
pkgs.neovim | |||
]; | ]; | ||
< | # User-specific installation (in ~/.config/nixpkgs/home.nix) | ||
home.packages = [ | |||
pkgs.neovim | |||
];}} | |||
After rebuilding your system with <code>nixos-rebuild switch</code> or <code>home-manager switch</code>, Neovim will be installed and accessible. | |||
== Configuration == <!--T:7--> | == Configuration == <!--T:7--> | ||
Line 60: | Line 53: | ||
</translate> | </translate> | ||
{{code|lang=nix|line=no|1=<translate> | |||
<translate> | |||
<!--T:39--> | <!--T:39--> | ||
# Global Configuration | # Global Configuration | ||
Line 79: | Line 71: | ||
set number relativenumber | set number relativenumber | ||
''; | ''; | ||
}; | };}} | ||
<translate> | <translate> | ||
Line 86: | Line 77: | ||
</translate> | </translate> | ||
{{code|lang=nix|line=no|1=<translate> | |||
<translate> | |||
<!--T:41--> | <!--T:41--> | ||
# Global Configuration | # Global Configuration | ||
Line 117: | Line 107: | ||
# 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"; | environment.variables.EDITOR = "nvim";}} | ||
<translate> | <translate> | ||
== Tips and Tricks == <!--T:12--> | == Tips and Tricks == <!--T:12--> | ||
{{expand}} | |||
==== Package Variations ==== <!--T:15--> | ==== Package Variations ==== <!--T:15--> | ||
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, | |||
You can run the master version via the following command: | You can run the master version via the following command: | ||
{{code|lang=bash|line=no|1=$ nix run "github:nix-community/neovim-nightly-overlay"}} | |||
nix run "github:nix-community/neovim-nightly-overlay" | |||
==== Plugin Management ==== <!--T:21--> | ==== Plugin Management ==== <!--T:21--> | ||
</translate> | </translate> | ||
{{code|lang=nix|line=no|1=plugins = [ | |||
plugins = [ | |||
<translate> | <translate> | ||
<!--T:49--> | <!--T:49--> | ||
Line 165: | Line 141: | ||
<!--T:51--> | <!--T:51--> | ||
# Example Plugin: nvim-colorizer-lua with Lua config | # Example Plugin: nvim-colorizer-lua with Lua config | ||
# Due to how the runtimepath for Lua modules is processed, your configuration may require | # 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: | # packadd! plugin-name to require a module. A home-manager example: | ||
</translate> | </translate> | ||
Line 232: | Line 208: | ||
<!--T:58--> | <!--T:58--> | ||
# Option 3: Installing grammars without Nix | # Option 3: Installing grammars without Nix | ||
# Installing grammar packages through the built-in command can lead to errors. | # 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 | # The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c | ||
</translate> | </translate> | ||
]; | ];}} | ||
<translate> | <translate> | ||
Line 242: | Line 217: | ||
<!--T:45--> | <!--T:45--> | ||
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them: | If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them: | ||
<!--T:19--> | <!--T:19--> | ||
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, " | * [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/</ref> | ||
<!--T:46--> | <!--T:46--> | ||
* [https://astronvim.com/ AstroVim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A. https://astronvim.com/</ref> | * [https://astronvim.com/ AstroVim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/</ref> | ||
<!--T:47--> | <!--T:47--> | ||
* [https://nvchad.com/ NVChad]<ref> | * [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/</ref> | ||
<!--T:48--> ==== FHS wrapper ==== | |||
You can create a custom neovim FHS wrapper | |||
{{code|lang=nix|line=no|1= | |||
{ | |||
buildFHSEnv, | |||
writeShellScript, | |||
neovim, | |||
}: | |||
buildFHSEnv { | |||
name = "nvim-fhs"; | |||
targetPkgs = pkgs: [ neovim ]; | |||
runScript = writeShellScript "nvim-fhs.sh" '' | |||
exec ${neovim}/bin/nvim "$@" | |||
''; | |||
} | |||
}} | |||
== Troubleshooting == | <!--T:FHS_WRAPPER_SOURCE--> | ||
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]. | |||
== Troubleshooting == <!--T:59--> | |||
{{expand}} | |||
==== lua-language-server: Dynamically linked executable error ==== | |||
In your <code>~/.local/state/nvim/lsp.log</code>, you have the following error: | |||
{{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--> | |||
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>. | |||
== References == <!--T:27--> | == References == <!--T:27--> | ||
== See also == | |||
* [[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://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://github.com/nix-community/neovim-overlay Neovim Overlay on Nixpkgs] – For nightly builds and additional Neovim packages. | |||
== References == | |||
</translate> | </translate> | ||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:CLI Applications]] | |||
[[Category:Text Editor]] | [[Category:Text Editor]] |
Latest revision as of 14:23, 31 July 2025
- 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 neovim
.
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:
environment.variables.EDITOR = "nvim";
Tips and Tricks
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
];
Frameworks
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:
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
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].
References
See also
- Home Manager – For declarative Neovim configuration at the user level: Neovim module in Home Manager
- Official Documentation – Official Neovim documentation.
- NixOS options for Neovim – System-level Neovim configuration.
- Neovim discussions on NixOS Discourse – Community tips, troubleshooting, and use cases.
- Neovim Overlay on Nixpkgs – For nightly builds and additional Neovim packages.
References
- ↑ Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/
- ↑ NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim
- ↑ Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay
- ↑ LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/
- ↑ AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/
- ↑ Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/
- ↑ NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032
- ↑ 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