Neovim: Difference between revisions
imported>Efskap Setting default editor: use defaultEditor opt instead of env var |
mNo edit summary |
||
(41 intermediate revisions by 16 users not shown) | |||
Line 1: | Line 1: | ||
[https://neovim.io Neovim] is a | <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> | |||
<!--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 [[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--> | |||
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 == <!--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}} | |||
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 = [ | |||
pkgs.neovim | |||
]; | |||
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--> | |||
==== Basic ==== <!--T:8--> | |||
< | |||
</translate> | |||
{{code|lang=nix|line=no|1=<translate> | |||
<!--T:39--> | |||
# Global Configuration | |||
< | </translate> | ||
< | |||
programs.neovim = { | programs.neovim = { | ||
enable = true; | |||
defaultEditor = true; | |||
}; | }; | ||
<translate> | |||
<!--T:40--> | |||
# Home Configuration | |||
</translate> | |||
programs.neovim = { | |||
< | enable = true; | ||
programs.neovim | extraConfig = '' | ||
set number relativenumber | |||
''; | |||
};}} | |||
<translate> | |||
< | |||
=== | ==== Advanced ==== <!--T:10--> | ||
</translate> | |||
{{code|lang=nix|line=no|1=<translate> | |||
<!--T:41--> | |||
# Global Configuration | |||
</translate> | |||
< | |||
programs.neovim = { | programs.neovim = { | ||
enable = true; | enable = true; | ||
defaultEditor = true; | |||
viAlias = true; | |||
vimAlias = true; | |||
configure = { | configure = { | ||
customRC = '' | customRC = '' | ||
Line 105: | Line 97: | ||
''; | ''; | ||
packages.myVimPackage = with pkgs.vimPlugins; { | packages.myVimPackage = with pkgs.vimPlugins; { | ||
start = [ | start = [ ctrlp ]; | ||
}; | }; | ||
}; | }; | ||
}; | }; | ||
<translate> | |||
<!--T:42--> | |||
# Home Configuration | |||
# You have to add the line below to set it as the default editor: | |||
</translate> | |||
environment.variables.EDITOR = "nvim";}} | |||
<translate> | |||
== Tips and Tricks == <!--T:12--> | |||
{{expand}} | |||
==== 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. | |||
You can run the master version via the following command: | |||
{{code|lang=bash|line=no|1=$ nix run "github:nix-community/neovim-nightly-overlay"}} | |||
==== Plugin Management ==== <!--T:21--> | |||
< | </translate> | ||
{{code|lang=nix|line=no|1=plugins = [ | |||
<translate> | |||
<!--T:49--> | |||
# Example Plugin: nvim-tree-lua | |||
</translate> | |||
pkgs.vimPlugins.nvim-tree-lua | |||
<translate> | |||
<!--T:50--> | |||
# Example Plugin: vim-startify with configuration | |||
</translate> | |||
{ | |||
plugin = pkgs.vimPlugins.vim-startify; | |||
config = "let g:startify_change_to_vcs_root = 0"; | |||
} | |||
<translate> | |||
<!--T:51--> | |||
# 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: | |||
</translate> | |||
{ | |||
plugin = pkgs.vimPlugins.nvim-colorizer-lua; | |||
config = '' | |||
packadd! nvim-colorizer.lua | |||
lua << END | |||
require 'colorizer'.setup { | |||
'*';<translate> <!--T:52--> -- Highlight all files, but customize some others.</translate> | |||
'!vim';<translate> <!--T:53--> -- Exclude vim from highlighting.</translate> | |||
} | |||
END | |||
''; | |||
} | |||
< | <translate> | ||
<!--T:54--> | |||
# Example Plugin: nvim-treesitter with Lua config | |||
</translate> | |||
} | { | ||
< | plugin = pkgs.vimPlugins.nvim-treesitter; | ||
config = '' | |||
packadd! nvim-treesitter | |||
lua <<EOF | |||
require'nvim-treesitter.configs'.setup { | |||
highlight = { | |||
enable = true, <translate><!--T:55--> -- false will disable the whole extension</translate> | |||
disable = {}, <translate><!--T:56--> -- list of languages that will be disabled</translate> | |||
}, | |||
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 | |||
''; | |||
} | |||
<translate> | |||
<!--T:57--> | |||
# 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 ])) | |||
<!--T:58--> | |||
# 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 | |||
</translate> | |||
];}} | |||
<translate> | |||
=== | ==== Frameworks ==== <!--T:18--> | ||
<!--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: | |||
<!--T:19--> | |||
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/</ref> | |||
<!--T:46--> | |||
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/</ref> | |||
<!--T:47--> | |||
* [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 "$@" | |||
''; | |||
} | |||
} | } | ||
</ | }} | ||
<!--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--> | |||
== 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> | |||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:CLI Applications]] | |||
[[Category:Text Editor]] |
Latest revision as of 13:25, 19 September 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