Neovim: Difference between revisions
m fix syntaxhighlight block |
mNo edit summary |
||
(12 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
[https://neovim.io Neovim] is a | [https://neovim.io/ Neovim] is a highly extensible and open source text editor that aims to improve upon and modernize the popular [[Vim]] 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 == | == Installation == | ||
=== | ==== Using nix-shell ==== | ||
<syntaxhighlight lang="bash" start="3"> | |||
nix-shell -p neovim | |||
</syntaxhighlight> | |||
[ | ==== Using Global Configuration ==== | ||
<syntaxhighlight lang="text"> | |||
environment.systemPackages = [ | |||
pkgs.neovim | |||
]; | |||
</syntaxhighlight>After modifying your configuration, apply the changes by running:<syntaxhighlight lang="bash"> | |||
sudo nixos-rebuild switch | |||
</syntaxhighlight> | |||
==== Using Home Configuration ==== | |||
<syntaxhighlight lang="text"> | |||
home.packages = [ | |||
pkgs.neovim | |||
]; | |||
</syntaxhighlight>After updating your configuration, apply the changes by running:<syntaxhighlight lang="bash"> | |||
home-manager switch | |||
</syntaxhighlight> | |||
== Configuration == | |||
==== Basic ==== | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
# Global Configuration | |||
programs.neovim = { | |||
enable = true; | |||
defaultEditor = true; | |||
}; | |||
# Home Configuration | |||
programs.neovim = { | programs.neovim = { | ||
enable = true; | enable = true; | ||
Line 16: | Line 47: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== Advanced ==== | |||
=== | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
# Global Configuration | |||
programs.neovim = { | programs.neovim = { | ||
enable = true; | enable = true; | ||
defaultEditor = true; | defaultEditor = true; | ||
viAlias = true; | viAlias = true; | ||
vimAlias = true; | vimAlias = true; | ||
configure = { | configure = { | ||
customRC = '' | customRC = '' | ||
Line 124: | Line 70: | ||
}; | }; | ||
}; | }; | ||
# Home Configuration | |||
# You have to add the line below to set it as the default editor: | |||
environment.variables.EDITOR = "nvim"; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Tips and Tricks == | |||
==== Where to see a list of options? ==== | |||
The home manager options are defined in the following [https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable Home Manager Options Manual]. | |||
The global options are listed on [https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim MyNixOS]. | |||
==== Can I use the latest version? ==== | |||
Have a look at the [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay] 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" | |||
=== | ==== What if I don't want to configure it myself? ==== | ||
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them: | |||
* [https://www.lazyvim.org/ LazyVim] | |||
[https:// | * [https://astronvim.com/ AstroVim] | ||
* [https://nvchad.com/ NVChad] | |||
* [https://wiki.nixos.org/wiki/LunarVim LunarVim] | |||
==== How to configure plugins? ==== | |||
<syntaxhighlight lang="nix"> | |||
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 | |||
]; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == References == | ||
# https://neovim.io/ | |||
# https://github.com/neovim/neovim | |||
# https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable | |||
# https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim | |||
# https://github.com/m15a/flake-awesome-neovim-plugins | |||
# https://github.com/NixNeovim/NixNeovimPlugins | |||
# https://www.lazyvim.org/ | |||
# https://astronvim.com/ | |||
# https://nvchad.com/ | |||
# [[LunarVim]] | |||
[[Category:Applications]] | [[Category:Applications]] | ||
[[Category:Text Editor]] |
Revision as of 13:15, 24 June 2024
Neovim is a highly extensible and open source text editor that aims to improve upon and modernize the popular Vim 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
Using nix-shell
nix-shell -p neovim
Using Global Configuration
environment.systemPackages = [
pkgs.neovim
];
After modifying your configuration, apply the changes by running:
sudo nixos-rebuild switch
Using Home Configuration
home.packages = [
pkgs.neovim
];
After updating your configuration, apply the changes by running:
home-manager switch
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
Where to see a list of options?
The home manager options are defined in the following Home Manager Options Manual.
The global options are listed on MyNixOS.
Can I use the latest version?
Have a look at the Neovim Nightly Overlay 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"
What if I don't want to configure it myself?
If you prefer not to configure your system manually, NixOS offers several predefined configurations and community-supported options. Here are a few of them:
How to configure plugins?
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
];
References
- https://neovim.io/
- https://github.com/neovim/neovim
- https://nix-community.github.io/home-manager/options.xhtml#opt-programs.neovim.enable
- https://mynixos.com/search?q=nixpkgs%2Foption%2Fprograms.neovim
- https://github.com/m15a/flake-awesome-neovim-plugins
- https://github.com/NixNeovim/NixNeovimPlugins
- https://www.lazyvim.org/
- https://astronvim.com/
- https://nvchad.com/
- LunarVim